<?php

namespace App\Http\Controllers\Api;

use App\Http\Controllers\Controller;
use App\Models\Rapport;
use App\Models\Etablissement;
use App\Models\Professeur;
use App\Services\DashboardService;
use Illuminate\Http\Request;

class DashboardController extends Controller
{
    protected $dashboardService;

    public function __construct(DashboardService $dashboardService)
    {
        $this->dashboardService = $dashboardService;
    }

    public function index()
    {
        try {
            $inspecteurId = auth()->id();
            $inspecteur = \App\Models\Inspecteur::find($inspecteurId);
            
            if (!$inspecteur || !$inspecteur->pole_id) {
                return response()->json(['error' => 'Inspecteur ou pôle non trouvé'], 404);
            }
            
            $poleId = $inspecteur->pole_id;
            
            // Statistiques générales - filtrées par pôle de l'inspecteur
            $totalRapports = Rapport::where('inspecteur_id', $inspecteurId)->count();
            
            $totalEtablissements = Etablissement::whereHas('commune.moughataa.region', function ($query) use ($poleId) {
                $query->where('pole_id', $poleId);
            })->count();
            
            $totalProfesseurs = Professeur::whereHas('etablissements.commune.moughataa.region', function ($query) use ($poleId) {
                $query->where('pole_id', $poleId);
            })->count();
            
            // Rapports par mois (pour l'inspecteur uniquement)
            $rapportsParMois = Rapport::where('inspecteur_id', $inspecteurId)
                ->selectRaw('
                    MONTH(date_inspection) as month,
                    COUNT(*) as count
                ')
                ->groupBy('month')
                ->orderBy('month')
                ->get()
                ->pluck('count', 'month')
                ->toArray();
            
            // Communes dans le pôle
            $totalCommunes = \App\Models\Commune::whereHas('moughataa.region', function ($query) use ($poleId) {
                $query->where('pole_id', $poleId);
            })->count();
            
            // Régions dans le pôle
            $totalWilayas = \App\Models\Region::where('pole_id', $poleId)->count();
            
            // Rapports par wilaya (pour l'inspecteur uniquement)
            $rapportsParWilaya = Rapport::where('rapports.inspecteur_id', $inspecteurId)
                ->join('etablissements', 'rapports.etablissement_id', '=', 'etablissements.id')
                ->join('communes', 'etablissements.commune_id', '=', 'communes.id')
                ->join('moughataas', 'communes.moughataa_id', '=', 'moughataas.id')
                ->join('regions', 'moughataas.region_id', '=', 'regions.id')
                ->join('poles', 'regions.pole_id', '=', 'poles.id')
                ->where('poles.id', $poleId)
                ->selectRaw('poles.libellefr as wilaya, COUNT(*) as count')
                ->groupBy('poles.id', 'poles.libellefr')
                ->get()
                ->pluck('count', 'wilaya')
                ->toArray();
            
            return response()->json([
                'total_rapports' => $totalRapports,
                'total_etablissements' => $totalEtablissements,
                'total_professeurs' => $totalProfesseurs,
                'total_wilayas' => $totalWilayas,
                'total_communes' => $totalCommunes,
                'rapports_jan' => $rapportsParMois[1] ?? 0,
                'rapports_fev' => $rapportsParMois[2] ?? 0,
                'rapports_mar' => $rapportsParMois[3] ?? 0,
                'rapports_avr' => $rapportsParMois[4] ?? 0,
                'rapports_mai' => $rapportsParMois[5] ?? 0,
                'rapports_juin' => $rapportsParMois[6] ?? 0,
                'wilaya_1' => $rapportsParWilaya['Wilaya 1'] ?? 0,
                'wilaya_2' => $rapportsParWilaya['Wilaya 2'] ?? 0,
                'wilaya_3' => $rapportsParWilaya['Wilaya 3'] ?? 0,
                'wilaya_4' => $rapportsParWilaya['Wilaya 4'] ?? 0,
            ]);
        } catch (\Exception $e) {
            return response()->json(['error' => $e->getMessage()], 500);
        }
    }
}
