<?php

namespace App\Http\Livewire;

use App\Models\Equipo;
use App\Models\Taller;
use Livewire\Component;
use Livewire\WithPagination;
use App\Exports\EquiposEnTallerExport;
use App\Exports\HistorialTallerExport;
use Maatwebsite\Excel\Facades\Excel;

class Talleres extends Component
{

    use WithPagination;
    public $equipos;
    public $equipo_id, $consultaEquipo = '', $mostrarResultados = false;
    public $fecha_llegada, $fecha_estimada_salida, $problema;    
    public $registroId, $fecha_entrega, $solucion, $costo_reparacion;
    public $mostrarEntrega = false;
    public $tallerSeleccionadoId = null;   
    public $mostrarFormulario = false;

    protected $paginationTheme = 'bootstrap';


   // public $historialTaller = [];

    protected $listeners = ['refresh' => '$refresh'];

    public function mount()
    {
        $this->equipos = Equipo::all();
        $this->fecha_llegada = now()->format('Y-m-d');
    }

    public function save()
    {
        $this->validate([
            'equipo_id' => 'required|exists:equipos,id',
            'fecha_llegada' => 'required|date',
            'problema' => 'required|string|max:255',
        ]);

        Taller::create([
            'equipo_id' => $this->equipo_id,
            'fecha_llegada' => $this->fecha_llegada,
            'fecha_estimada_salida' => $this->fecha_estimada_salida,
            'problema' => $this->problema,
        ]);

        // Cambiar estado del equipo a "inactivo"
        Equipo::find($this->equipo_id)->update(['estado' => 'inactivo']);

        session()->flash('message', 'Equipo agregado al taller correctamente.');
        $this->reset(['equipo_id', 'fecha_llegada', 'fecha_estimada_salida', 'problema']);
    }

    public function marcarEntregado($id)
    {
        $taller = Taller::find($id);
        $taller->update([
            'fecha_entrega' => now(),
        ]);

        // Cambiar estado del equipo a "activo"
        $taller->equipo->update(['estado' => 'activo']);

        session()->flash('message', 'Equipo marcado como entregado.');
    }

    private function obtenerHistorial()
    {
        return Taller::with('equipo')
            ->whereNotNull('fecha_entrega')
            ->orderByDesc('fecha_entrega')
            ->get();
    }

    public function render()
    {
        $equiposDisponibles = Equipo::where('estado', 'activo')->get();

        $equiposTaller = Taller::with('equipo')
            ->whereNull('fecha_entrega')
            ->orderByDesc('fecha_llegada')
            ->paginate(5, ['*'], 'tallerPage'); // Identificador para evitar conflicto

        $historialTaller = Taller::with('equipo')
            ->whereNotNull('fecha_entrega')
            ->orderByDesc('fecha_entrega')
            ->paginate(5, ['*'], 'historialPage'); // Segundo paginador

        return view('livewire.talleres', [
            'equiposDisponibles' => $equiposDisponibles,
            'equiposTaller' => $equiposTaller,
            'historialTaller' => $historialTaller,
        ]);
    }

    public function exportarEquiposEnTaller()
    {
        return Excel::download(new EquiposEnTallerExport, 'equipos-en-taller.xlsx');
    }

public function exportarHistorialTaller()
    {
        return Excel::download(new HistorialTallerExport, 'historial-taller.xlsx');
    }

    public function abrirEntrega($id)
    {
        $this->tallerSeleccionadoId = $id;
        $this->mostrarEntrega = true;
    }

    public function registrarEntrega()
    {
        $this->validate([
            'fecha_entrega' => 'required|date',
            'solucion' => 'required|string',
            'costo_reparacion' => 'nullable|numeric|min:0',
        ]);

        $taller = Taller::findOrFail($this->tallerSeleccionadoId);

        $taller->update([
            'fecha_entrega' => $this->fecha_entrega,
            'solucion' => $this->solucion,
            'costo_reparacion' => $this->costo_reparacion,
        ]);

        // Reactivar el equipo
        $taller->equipo->update(['estado' => 'activo']);

        $this->reset(['mostrarEntrega', 'tallerSeleccionadoId', 'fecha_entrega', 'solucion', 'costo_reparacion']);
       
        session()->flash('message', 'Equipo entregado correctamente.');
      //  $this->emitSelf('refresh');
    }

     public function buscarEquipos()
    {
        return Equipo::where('estado', 'activo')
            ->whereNotIn('id', Taller::whereNull('fecha_entrega')->pluck('equipo_id'))
            ->where(function ($q) {
                $q->where('codigo', 'like', '%' . $this->consultaEquipo . '%')
                  ->orWhere('descripcion', 'like', '%' . $this->consultaEquipo . '%');
            })
            ->limit(8)
            ->get();
    }

    

}
