<?php

namespace App\Http\Livewire;

use Livewire\Component;
use Livewire\WithPagination;
use App\Models\Equipo;
use App\Models\ControlDiario;
use Carbon\Carbon;
use Maatwebsite\Excel\Facades\Excel;
use App\Exports\ControlDiarioExport;


class ControlDiarioLive extends Component
{
    use WithPagination;

    public $fecha;
    public $filtroBusqueda = '';
    public $edits = [];
    public $expandedRow = null; // Para controlar la fila expandida
    public $unidadFiltro = '';

    protected $paginationTheme = 'bootstrap';

    public function mount()
    {
        $this->fecha = now()->format('Y-m-d');
    }

    public function updatedFecha()
    {
        $this->resetPage();
        $this->edits = [];
    }

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

    public function toggleRow($equipoId)
    {
        if ($this->expandedRow === $equipoId) {
            $this->expandedRow = null;
        } else {
            $this->expandedRow = $equipoId;
        }
    }

    public function guardar()
    {
        foreach ($this->edits as $equipo_id => $datos) {
            ControlDiario::updateOrCreate(
                ['equipo_id' => $equipo_id, 'fecha' => $this->fecha],
                [
                    'salio' => $datos['salio'] ?? false,
                    'hora_salida' => $datos['hora_salida'] ?: null,
                    'hora_regreso' => $datos['hora_regreso'] ?: null,
                    'zona_servicio' => $datos['zona_servicio'] ?? '',
                    'observaciones' => $datos['observaciones'] ?? '',
                ]
            );
        }

        session()->flash('mensaje', 'Controles guardados correctamente.');
    }

    public function exportarExcel()
    {
        return Excel::download(new ControlDiarioExport($this->fecha), 'reporte-control-flota.xlsx');
    }

public function render()
{
    $fechaSeleccionada = $this->fecha;

    $equipos = Equipo::with('unidad')
        ->where(function ($query) use ($fechaSeleccionada) {
            $query->where('estado', 'activo')
                ->orWhereHas('controles', function ($q) use ($fechaSeleccionada) {
                    $q->whereDate('fecha', $fechaSeleccionada);
                });
        })
        ->when($this->filtroBusqueda, function ($query) {
            $query->where(function ($q) {
                $q->where('codigo', 'like', "%{$this->filtroBusqueda}%")
                  ->orWhere('descripcion', 'like', "%{$this->filtroBusqueda}%");
            });
        })
        ->when($this->unidadFiltro, function ($query) {
            $query->where('unidad_id', $this->unidadFiltro);
        })
        ->orderBy('descripcion')
        ->paginate(10);

    // Cargar valores editables
    foreach ($equipos as $equipo) {
        if (!array_key_exists($equipo->id, $this->edits)) {
            $control = ControlDiario::where('equipo_id', $equipo->id)
                ->whereDate('fecha', $this->fecha)
                ->first();

            $this->edits[$equipo->id] = [
                'salio' => $control->salio ?? false,
                'hora_salida' => $control->hora_salida ?? '',
                'hora_regreso' => $control->hora_regreso ?? '',
                'zona_servicio' => $control->zona_servicio ?? '',
                'observaciones' => $control->observaciones ?? '',
            ];
        }
    }

    $unidades = \App\Models\Unidad::all();

    return view('livewire.control-diario-live', [
        'equipos' => $equipos,
        'unidades' => $unidades,
    ]);
}


}
