<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Models\Immobilier;
use App\Models\InstitutionPriveJeunesse;
use App\Models\ProjetDivertissementJeuneEnfant;
use App\Models\InvestissementSport;
use App\Models\DebutActivite;
use App\Models\ActiviteJeuneEnfant;
use App\Models\Reservation;
use App\Models\Auberge;
use App\Models\DemandeManifestation;
use App\Models\DocumentsFinancementList;
use App\Models\Concours;
use App\Models\Candidate;

class DashboardController extends Controller
{
    public function index()
    {
        if (!auth()->check()) {
            return redirect()->route('admin');
        }

        $userRoleId = auth()->user()->roles->first()->id_roles ?? null;

        // ========== KPI INVESTISSEMENT ==========
        
        // 1. Salles de Sport (id_type_formulaire = 1)
        $sallesSport = [
            'accepte' => Immobilier::where('id_type_formulaire', 1)
                ->where('id_statut', 1)
                ->count(),
            'refuse' => Immobilier::where('id_type_formulaire', 1)
                ->where('id_statut', 3)
                ->count(),
            'total' => Immobilier::where('id_type_formulaire', 1)->count(),
        ];
        $sallesSport['en_cours'] = $sallesSport['total'] - $sallesSport['accepte'] - $sallesSport['refuse'];

        // 2. Début d'Activité (Salles de Sport)
        $debutActivite = [
            'accepte' => DebutActivite::where('id_statut', 1)->count(),
            'refuse' => DebutActivite::where('id_statut', 3)->count(),
            'total' => DebutActivite::count(),
        ];
        $debutActivite['en_cours'] = $debutActivite['total'] - $debutActivite['accepte'] - $debutActivite['refuse'];

        // 3. Jeunesse - Institutions Privées (formulaire 19)
        $jeunesseInstitutions = [
            'accepte' => InstitutionPriveJeunesse::where('id_statut', 1)->count(),
            'refuse' => InstitutionPriveJeunesse::where('id_statut', 3)->count(),
            'total' => InstitutionPriveJeunesse::count(),
        ];
        $jeunesseInstitutions['en_cours'] = $jeunesseInstitutions['total'] - $jeunesseInstitutions['accepte'] - $jeunesseInstitutions['refuse'];

        // 4. Jeunesse - Activités Jeune Enfant (formulaire 21)
        $jeunesseActivites = [
            'accepte' => ActiviteJeuneEnfant::where('id_statut', 1)->count(),
            'refuse' => ActiviteJeuneEnfant::where('id_statut', 3)->count(),
            'total' => ActiviteJeuneEnfant::count(),
        ];
        $jeunesseActivites['en_cours'] = $jeunesseActivites['total'] - $jeunesseActivites['accepte'] - $jeunesseActivites['refuse'];

        // 5. Jeune Enfant - Projets de Divertissement (formulaire 3)
        $jeuneEnfant = [
            'accepte' => ProjetDivertissementJeuneEnfant::where('id_statut', 1)->count(),
            'refuse' => ProjetDivertissementJeuneEnfant::where('id_statut', 3)->count(),
            'total' => ProjetDivertissementJeuneEnfant::count(),
        ];
        $jeuneEnfant['en_cours'] = $jeuneEnfant['total'] - $jeuneEnfant['accepte'] - $jeuneEnfant['refuse'];

        // 6. Formation & Stage - Investissement Sportif (formulaire 5)
        $formationStage = [
            'accepte' => InvestissementSport::where('id_statut', 1)->count(),
            'refuse' => InvestissementSport::where('id_statut', 3)->count(),
            'total' => InvestissementSport::count(),
        ];
        $formationStage['en_cours'] = $formationStage['total'] - $formationStage['accepte'] - $formationStage['refuse'];

        // 7. Réservations d'Auberges
        $reservations = [
            'accepte' => Reservation::where('statut_id', 1)->count(),
            'refuse' => Reservation::where('statut_id', 3)->count(),
            'total' => Reservation::count(),
        ];
        $reservations['en_cours'] = $reservations['total'] - $reservations['accepte'] - $reservations['refuse'];

        // 8. Auberges et Centres d'Hébergement
        $auberges = [
            'total' => Auberge::count(),
            'epa' => Auberge::where('epa', 'EPA')->count(),
            'non_epa' => Auberge::where('epa', 'Non EPA')->count(),
            'capacite_totale' => Auberge::sum('capacite_batiment'),
        ];

        // 9. Financements (DocumentsFinancementList)
        $financements = [
            'accepte' => DocumentsFinancementList::where('brouillon', false)
                ->where('id_statut1', 1)
                ->count(),
            'refuse' => DocumentsFinancementList::where('brouillon', false)
                ->where('id_statut1', 3)
                ->count(),
            'total' => DocumentsFinancementList::where('brouillon', false)->count(),
        ];
        $financements['en_cours'] = $financements['total'] - $financements['accepte'] - $financements['refuse'];

        // 10. Manifestations Sportives Nationales (type_formulaire_id = 12)
        $manifestationsNationales = [
            'accepte' => DemandeManifestation::where('type_formulaire_id', 12)
                ->where('statut_id', 1)
                ->count(),
            'refuse' => DemandeManifestation::where('type_formulaire_id', 12)
                ->where('statut_id', 3)
                ->count(),
            'total' => DemandeManifestation::where('type_formulaire_id', 12)->count(),
        ];
        $manifestationsNationales['en_cours'] = $manifestationsNationales['total'] - $manifestationsNationales['accepte'] - $manifestationsNationales['refuse'];

        // 11. Manifestations Sportives Internationales (type_formulaire_id = 13)
        $manifestationsInternationales = [
            'accepte' => DemandeManifestation::where('type_formulaire_id', 13)
                ->where('statut_id', 1)
                ->count(),
            'refuse' => DemandeManifestation::where('type_formulaire_id', 13)
                ->where('statut_id', 3)
                ->count(),
            'total' => DemandeManifestation::where('type_formulaire_id', 13)->count(),
        ];
        $manifestationsInternationales['en_cours'] = $manifestationsInternationales['total'] - $manifestationsInternationales['accepte'] - $manifestationsInternationales['refuse'];

        // Totaux globaux (investissement uniquement)
        $totaux = [
            'en_cours' => $sallesSport['en_cours'] + $debutActivite['en_cours'] + 
                         $jeunesseInstitutions['en_cours'] + $jeunesseActivites['en_cours'] +
                         $jeuneEnfant['en_cours'] + $formationStage['en_cours'],
            'accepte' => $sallesSport['accepte'] + $debutActivite['accepte'] + 
                        $jeunesseInstitutions['accepte'] + $jeunesseActivites['accepte'] +
                        $jeuneEnfant['accepte'] + $formationStage['accepte'],
            'refuse' => $sallesSport['refuse'] + $debutActivite['refuse'] + 
                       $jeunesseInstitutions['refuse'] + $jeunesseActivites['refuse'] +
                       $jeuneEnfant['refuse'] + $formationStage['refuse'],
            'total' => $sallesSport['total'] + $debutActivite['total'] + 
                      $jeunesseInstitutions['total'] + $jeunesseActivites['total'] +
                      $jeuneEnfant['total'] + $formationStage['total'],
        ];

        // Totaux globaux pour les financements
        $totauxFinancements = [
            'en_cours' => $financements['en_cours'],
            'accepte' => $financements['accepte'],
            'refuse' => $financements['refuse'],
            'total' => $financements['total'],
        ];

        // Totaux globaux pour les manifestations
        $totauxManifestations = [
            'en_cours' => $manifestationsNationales['en_cours'] + $manifestationsInternationales['en_cours'],
            'accepte' => $manifestationsNationales['accepte'] + $manifestationsInternationales['accepte'],
            'refuse' => $manifestationsNationales['refuse'] + $manifestationsInternationales['refuse'],
            'total' => $manifestationsNationales['total'] + $manifestationsInternationales['total'],
        ];

        // Totaux globaux pour réservations et auberges
        $totauxReservations = [
            'en_cours' => $reservations['en_cours'],
            'accepte' => $reservations['accepte'],
            'refuse' => $reservations['refuse'],
            'total' => $reservations['total'],
            'total_auberges' => $auberges['total'],
            'capacite_totale' => $auberges['capacite_totale'],
        ];

        // 12. Concours
        $concours = [
            'total_concours' => Concours::count(),
            'concours_publies' => Concours::where('etat', 'published')->count(),
            'concours_clotures' => Concours::where('etat', 'closed')->count(),
            'total_candidats' => Candidate::count(),
            'en_cours' => Candidate::where('etat', 'en_cours')->count(),
            'accepte_primaire' => Candidate::where('etat', 'acceptation_primaire')->count(),
            'accepte_definitif' => Candidate::where('etat', 'acceptation_definitif')->count(),
            'refuse' => Candidate::where('etat', 'refuse')->count(),
        ];

        // Totaux globaux pour les concours
        $totauxConcours = [
            'total_concours' => $concours['total_concours'],
            'concours_publies' => $concours['concours_publies'],
            'total_candidats' => $concours['total_candidats'],
            'en_cours' => $concours['en_cours'],
            'accepte_primaire' => $concours['accepte_primaire'],
            'accepte_definitif' => $concours['accepte_definitif'],
            'refuse' => $concours['refuse'],
        ];

        return view('backoffice.dashboard-content', compact(
            'userRoleId',
            'sallesSport',
            'debutActivite',
            'jeunesseInstitutions',
            'jeunesseActivites',
            'jeuneEnfant',
            'formationStage',
            'reservations',
            'auberges',
            'financements',
            'manifestationsNationales',
            'manifestationsInternationales',
            'concours',
            'totaux',
            'totauxFinancements',
            'totauxManifestations',
            'totauxReservations',
            'totauxConcours'
        ));
    }
}
