<?php

namespace App\Http\Livewire;

use Livewire\Component;
use Livewire\WithPagination;
use App\Models\Equipo;
use App\Models\Unidad;

class Equipos extends Component
{
    use WithPagination;

    public $codigo, $descripcion, $marca, $modelo, $anio, $estado = 'activo', $observaciones;
    public $equipo_id, $modoEdicion = false;
    public $filtroEstado = '';
    public $busqueda = '';
    public $propiedad;
    public $unidad;
    public $unidad_id;
    public $unidades;
    public $unidadFiltro = null;

    protected $paginationTheme = 'bootstrap';

    protected $rules = [
        'codigo' => 'required|unique:equipos,codigo',
        'descripcion' => 'required',
        'unidad_id' => 'required|exists:unidades,id',
    ];

    public function updatingBusqueda()
    {
        $this->resetPage();
    }

    public function updatingFiltroEstado()
    {
        $this->resetPage();
    }
/*
    public function render()
    {
        $query = Equipo::query();
        $unidades = Unidad::all();

        if ($this->filtroEstado !== '') {
            $query->where('estado', $this->filtroEstado);
        }

        if ($this->busqueda !== '') {
            $query->where(function ($q) {
                $q->where('descripcion', 'like', '%' . $this->busqueda . '%')
                  ->orWhere('marca', 'like', '%' . $this->busqueda . '%')
                  ->orWhere('modelo', 'like', '%' . $this->busqueda . '%');
            });
        }

         $equipos = Equipo::with('unidad')
        ->when($this->unidadFiltro, function ($query) {
            $query->where('unidad_id', $this->unidadFiltro);
        })
        ->get();

        $equipos = $query->latest()->paginate(5);

        return view('livewire.equipos', compact('equipos', 'unidades'));
    }*/

   /* public function render()
{
    $unidades = Unidad::all();

    $query = Equipo::with('unidad');

    if ($this->filtroEstado !== '') {
        $query->where('estado', $this->filtroEstado);
    }

    if ($this->busqueda !== '') {
        $query->where(function ($q) {
            $q->where('descripcion', 'like', '%' . $this->busqueda . '%')
              ->orWhere('marca', 'like', '%' . $this->busqueda . '%')
              ->orWhere('modelo', 'like', '%' . $this->busqueda . '%');
        });
    }

    if ($this->unidadFiltro !== '') {
        $query->where('unidad_id', $this->unidadFiltro);
    }

    $equipos = $query->latest()->paginate(5);

    return view('livewire.equipos', compact('equipos', 'unidades'));
}
*/

public function render()
{
    $unidades = Unidad::all();

    $query = Equipo::with('unidad');

   if (empty($this->filtroEstado)) {
        $query->where('estado', 'activo');
    } else {
        $query->where('estado', $this->filtroEstado);
    }

    if ($this->busqueda !== '') {
        $query->where(function ($q) {
            $q->where('descripcion', 'like', '%' . $this->busqueda . '%')
              ->orWhere('marca', 'like', '%' . $this->busqueda . '%')
              ->orWhere('modelo', 'like', '%' . $this->busqueda . '%');
        });
    }

    if (!empty($this->unidadFiltro)) {
        $query->where('unidad_id', $this->unidadFiltro);
    }

    $equipos = $query->latest()->paginate(5);

    return view('livewire.equipos', compact('equipos', 'unidades'));
}


    public function guardar()
    {
        $this->validate();

        Equipo::create($this->campos());

        session()->flash('mensaje', 'Equipo guardado correctamente.');
        $this->resetCampos();
    }
/*
    public function editar($id)
    {
        $equipo = Equipo::findOrFail($id);
        $this->equipo_id = $equipo->id;
        $this->fill($equipo->toArray());
        $this->modoEdicion = true;
    }*/

    public function editar($id)
{
    $equipo = Equipo::findOrFail($id);
    $this->equipo_id = $equipo->id;
    $this->codigo = $equipo->codigo;
    $this->descripcion = $equipo->descripcion;
    $this->marca = $equipo->marca;
    $this->modelo = $equipo->modelo;
    $this->anio = $equipo->anio;
    $this->estado = $equipo->estado;
    $this->observaciones = $equipo->observaciones;
    $this->propiedad = $equipo->propiedad;
    $this->unidad_id = $equipo->unidad_id; // 👈 importante
    $this->modoEdicion = true;
    
}


    public function actualizar()
    {
        $this->validate([
            'codigo' => 'required|unique:equipos,codigo,' . $this->equipo_id,
            'descripcion' => 'required',
            'unidad_id' => 'required|exists:unidades,id',
        ]);

        Equipo::findOrFail($this->equipo_id)->update($this->campos());

        session()->flash('mensaje', 'Equipo actualizado correctamente.');
        $this->resetCampos();
    }

    public function eliminar($id)
    {
        Equipo::destroy($id);
        session()->flash('mensaje', 'Equipo eliminado.');
    }

    public function cancelar()
    {
        $this->resetCampos();
    }

    private function resetCampos()
    {
        $this->reset(['codigo', 'descripcion', 'marca', 'modelo', 'anio', 'estado', 'observaciones', 'equipo_id','propiedad', 'unidad_id', 'modoEdicion']);
        $this->estado = 'activo';
    }

    private function campos()
    {
        return [
            'codigo' => $this->codigo,
            'descripcion' => $this->descripcion,
            'marca' => $this->marca,
            'modelo' => $this->modelo,
            'anio' => $this->anio,
            'estado' => $this->estado,
            'observaciones' => $this->observaciones,
            'propiedad' => $this->propiedad,
            'unidad_id' => $this->unidad_id,
        ];
    }

    public function mount()
    {
        $this->unidades = Unidad::all();
         $this->filtroEstado = '';
         
    }
}
