<?php

namespace App\Http\Controllers\Web;

use App\Http\Controllers\Controller;
use App\Models\MantProgramacion;
use App\Models\MantAprobacion;
use App\Models\Concesion;
use App\Models\PeajeCentro;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;

class MantenimientosRealizadosController extends Controller
{
    /**
     * Listado de mantenimientos realizados
     * Vista para jefes operativos/clientes
     */
    public function index(Request $request)
    {
        $user = Auth::user();

        // Query base - solo mantenimientos completados o aprobados
        $query = MantProgramacion::with([
            'centro.concesion',
            'via',
            'tecnico',
            'estadoMantenimiento',
            'aprobacion.usuarioAprueba'
        ])
        ->whereHas('estadoMantenimiento', function ($q) {
            $q->whereIn('estado_codigo', ['COMPLETADO', 'APROBADO', 'FINALIZADO']);
        });

        // Si es usuario externo, filtrar por concesión asignada
        if ($user->esExterno()) {
            // TODO: Filtrar por concesión del usuario externo
        }

        // Filtros
        if ($request->filled('desde')) {
            $query->where('fecha_programada', '>=', $request->desde);
        }

        if ($request->filled('hasta')) {
            $query->where('fecha_programada', '<=', $request->hasta);
        }

        if ($request->filled('concesion')) {
            $query->whereHas('centro', function ($q) use ($request) {
                $q->where('id_concesion', $request->concesion);
            });
        }

        if ($request->filled('peaje')) {
            $query->where('id_centro', $request->peaje);
        }

        if ($request->filled('aprobado')) {
            if ($request->aprobado == '1') {
                $query->where('aprobado', true);
            } else {
                $query->where('aprobado', false);
            }
        }

        // Ordenar por fecha más reciente
        $query->orderBy('fecha_programada', 'desc');

        // Paginación
        $mantenimientos = $query->paginate(20)->appends($request->query());

        // Datos para filtros
        $concesiones = Concesion::activas()->orderBy('nombre')->get();

        // Estadísticas
        $estadisticas = [
            'total_completados' => MantProgramacion::whereHas('estadoMantenimiento', function ($q) {
                $q->whereIn('estado_codigo', ['COMPLETADO', 'APROBADO', 'FINALIZADO']);
            })->count(),
            'aprobados' => MantProgramacion::where('aprobado', true)->count(),
            'pendientes_aprobacion' => MantProgramacion::whereHas('estadoMantenimiento', function ($q) {
                $q->where('estado_codigo', 'COMPLETADO');
            })->where('aprobado', false)->count(),
        ];

        return view('modules.mantenimientos-realizados.index', compact(
            'mantenimientos',
            'concesiones',
            'estadisticas'
        ));
    }

    /**
     * Detalle de un mantenimiento realizado
     */
    public function show($id)
    {
        $mantenimiento = MantProgramacion::with([
            'centro.concesion',
            'via',
            'tecnico',
            'estadoMantenimiento',
            'aprobacion.usuarioAprueba',
            'checklistRespuestas.itemRevision',
            'checklistRespuestas.estadoEquipo',
            'evidencias'
        ])->findOrFail($id);

        return view('modules.mantenimientos-realizados.show', compact('mantenimiento'));
    }

    /**
     * Generar reporte PDF del mantenimiento
     */
    public function generarReporte($id)
    {
        $mantenimiento = MantProgramacion::with([
            'centro.concesion',
            'via',
            'tecnico',
            'estadoMantenimiento',
            'aprobacion',
            'checklistRespuestas.itemRevision',
            'checklistRespuestas.estadoEquipo',
            'evidencias'
        ])->findOrFail($id);

        // TODO: Implementar generación de PDF con DomPDF
        return back()->with('info', 'Generación de PDF en desarrollo.');
    }

    /**
     * Reporte público accesible por código QR
     */
    public function reportePublico($codigo)
    {
        $aprobacion = MantAprobacion::with([
            'programacion.centro.concesion',
            'programacion.via',
            'programacion.tecnico',
            'programacion.checklistRespuestas.itemRevision',
            'usuarioAprueba'
        ])->porCodigo($codigo)->firstOrFail();

        return view('modules.mantenimientos-realizados.reporte-publico', compact('aprobacion'));
    }
}
