<?php

namespace App\Http\Controllers;

use App\Models\Caso;
use App\Models\Tenant;
use Illuminate\Http\Request;

class DashboardController extends Controller
{
    public function index(Request $request)
    {
        $user = $request->user();
        $query = Caso::query();

        if ($user->rol !== 'admin' && $user->tenant_id) {
            $query->where('tenant_id', $user->tenant_id);
        }

        $stats = [
            'casos_activos' => (clone $query)->whereIn('estado_actual', [
                'pendiente_coordinacion',
                'coordinado',
                'caso_en_ruta',
                'analisis',
                'inspeccion_realizada',
                'elaboracion_informe',
                'mesa_compras',
                'en_reparacion',
                'facturacion',
            ])->count(),
            'en_reparacion' => (clone $query)->where('estado_actual', 'en_reparacion')->count(),
            'pendientes' => (clone $query)->where('estado_actual', 'pendiente_coordinacion')->count(),
            'finalizados' => (clone $query)->where('estado_actual', 'finalizado')->count(),
        ];

        $casos_recientes = (clone $query)->with(['cliente', 'vehiculo', 'aseguradora', 'estadosHistoricos'])
            ->orderBy('created_at', 'desc')
            ->limit(10)
            ->get();

        $aseguradoras_query = Tenant::withCount([
            'casos' => function ($q) use ($user) {
                if ($user->rol !== 'admin' && $user->tenant_id) {
                    $q->where('tenant_id', $user->tenant_id);
                }
            },
        ]);

        if ($user->rol !== 'admin' && $user->tenant_id) {
            $aseguradoras_query->where('id', $user->tenant_id);
        }

        $aseguradoras = $aseguradoras_query
            ->orderBy('casos_count', 'desc')
            ->limit(5)
            ->get();

        return inertia('Dashboard', [
            'title' => 'Dashboard',
            'stats' => $stats,
            'casos_recientes' => $casos_recientes,
            'aseguradoras' => $aseguradoras,
        ]);
    }
}
