<?php

namespace App\Traits;

use Illuminate\Support\Facades\Auth;

trait Auditable
{
    /**
     * Boot del trait para registrar eventos
     */
    public static function bootAuditable(): void
    {
        // Al crear registro
        static::creating(function ($model) {
            if (Auth::check()) {
                $model->usuario_crea = Auth::id();
            }
            $model->fecha_crea = now();
        });

        // Al actualizar registro
        static::updating(function ($model) {
            if (Auth::check()) {
                $model->usuario_modifica = Auth::id();
            }
            $model->fecha_modifica = now();
        });
    }

    /**
     * Marcar como eliminado (soft delete manual)
     */
    public function marcarEliminado(): bool
    {
        $this->estado = 0;

        if (Auth::check()) {
            $this->usuario_elimina = Auth::id();
        }
        $this->fecha_elimina = now();

        return $this->save();
    }

    /**
     * Scope para registros activos
     */
    public function scopeActivos($query)
    {
        return $query->where('estado', 1);
    }

    /**
     * Scope para registros inactivos
     */
    public function scopeInactivos($query)
    {
        return $query->where('estado', 0);
    }

    /**
     * Verificar si está activo
     */
    public function estaActivo(): bool
    {
        return $this->estado == 1;
    }

    /**
     * Obtener usuario que creó
     */
    public function creadoPor()
    {
        return $this->belongsTo(\App\Models\Usuario::class, 'usuario_crea', 'usu_id');
    }

    /**
     * Obtener usuario que modificó
     */
    public function modificadoPor()
    {
        return $this->belongsTo(\App\Models\Usuario::class, 'usuario_modifica', 'usu_id');
    }

    /**
     * Obtener usuario que eliminó
     */
    public function eliminadoPor()
    {
        return $this->belongsTo(\App\Models\Usuario::class, 'usuario_elimina', 'usu_id');
    }
}
