<?php

namespace App\Http\Controllers\Web;

use App\Http\Controllers\Controller;
use App\Models\Alerta;
use App\Models\MantProgramacion;
use App\Models\MantEstado;
use App\Models\Usuario;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\DB;

class DashboardController extends Controller
{
    /**
     * Dashboard principal
     */
    public function index()
    {
        $usuario = Auth::user();
        $hoy = now()->format('Y-m-d');
        $inicioMes = now()->startOfMonth()->format('Y-m-d');
        $finMes = now()->endOfMonth()->format('Y-m-d');

        // Obtener IDs de estados por código
        $estadoCompletado = MantEstado::where('estado_codigo', 'COMPLETADO')->first();
        $estadoPendienteAprobacion = MantEstado::where('estado_codigo', 'PENDIENTE_APROBACION')->first();
        $estadosPendientes = MantEstado::whereIn('estado_codigo', [
            'PROGRAMADO', 'CONFIRMADO', 'EN_PROCESO', 'EN_CAMINO'
        ])->pluck('estado_id')->toArray();

        // Estadísticas generales del mes
        $stats = [
            'programados' => MantProgramacion::whereBetween('fecha_programada', [$inicioMes, $finMes])->count(),
            'completados' => MantProgramacion::whereBetween('fecha_programada', [$inicioMes, $finMes])
                ->where('estado_id', $estadoCompletado?->estado_id)->count(),
            'pendientes' => MantProgramacion::whereBetween('fecha_programada', [$inicioMes, $finMes])
                ->whereIn('estado_id', $estadosPendientes)->count(),
            'pendientes_aprobacion' => MantProgramacion::where('estado_id', $estadoPendienteAprobacion?->estado_id)->count(),
        ];

        $stats['porcentaje_cumplimiento'] = $stats['programados'] > 0
            ? round(($stats['completados'] / $stats['programados']) * 100, 1)
            : 0;

        // Mantenimientos de hoy
        $mantenimientosHoy = MantProgramacion::with(['centro', 'via', 'tecnico', 'estadoMantenimiento'])
            ->whereDate('fecha_programada', $hoy)
            ->orderBy('estado_id')
            ->limit(10)
            ->get();

        // Alertas activas
        $alertasActivas = Alerta::where('estado', 'ACTIVA')
            ->orderByRaw("FIELD(prioridad, 'ALTA', 'MEDIA', 'BAJA')")
            ->orderBy('fecha_genera', 'desc')
            ->limit(5)
            ->get();

        // Resumen por estado (para gráfico)
        $resumenEstados = MantProgramacion::select('estado_id', DB::raw('count(*) as total'))
            ->whereBetween('fecha_programada', [$inicioMes, $finMes])
            ->groupBy('estado_id')
            ->get()
            ->map(function ($item) {
                $estado = MantEstado::find($item->estado_id);
                return [
                    'estado' => $estado?->estado_nombre ?? 'Sin estado',
                    'total' => $item->total,
                    'color' => $estado?->color_hex ?? '#6c757d',
                ];
            });

        // Actividad reciente
        $actividadReciente = MantProgramacion::with(['centro', 'via', 'tecnico', 'estadoMantenimiento'])
            ->orderBy('fecha_modifica', 'desc')
            ->limit(8)
            ->get();

        return view('dashboard.index', compact(
            'stats',
            'mantenimientosHoy',
            'alertasActivas',
            'resumenEstados',
            'actividadReciente'
        ));
    }
}
