<?php

namespace App\Http\Controllers\Api;

use App\Http\Controllers\Controller;
use App\Models\Filiere;
use Illuminate\Http\Request;
use Illuminate\Http\JsonResponse;

class FiliereController extends Controller
{
    /**
     * Liste toutes les filières
     * GET /api/v1/filieres
     */
    public function index(Request $request): JsonResponse
    {
        $query = Filiere::with(['departementRelation'])
            ->valide();

        // Filtrer par département
        if ($request->has('departement') && $request->departement) {
            $query->where('idDepartement', $request->departement);
        }

        $filieres = $query->orderBy('intituleFilieres', 'asc')->get();

        return response()->json([
            'success' => true,
            'data' => $filieres,
            'count' => $filieres->count()
        ]);
    }

    /**
     * Afficher une filière spécifique avec ses ECUs
     * GET /api/v1/filieres/{id}
     */
    public function show(int $id): JsonResponse
    {
        $filiere = Filiere::with(['departementRelation', 'ecus.enseignant'])
            ->find($id);

        if (!$filiere) {
            return response()->json([
                'success' => false,
                'message' => 'Filière non trouvée'
            ], 404);
        }

        return response()->json([
            'success' => true,
            'data' => $filiere
        ]);
    }

    /**
     * Récupérer l'emploi du temps d'une filière
     * GET /api/v1/filieres/{id}/emplois-du-temps
     */
    public function emploisDuTemps(int $id, Request $request): JsonResponse
    {
        $filiere = Filiere::find($id);

        if (!$filiere) {
            return response()->json([
                'success' => false,
                'message' => 'Filière non trouvée'
            ], 404);
        }

        $query = $filiere->ecus()
            ->valide()
            ->with([
                'emploisDuTemps' => function ($q) use ($request) {
                    $q->valide()
                        ->with(['jourRelation', 'salleRelation'])
                        ->orderBy('jour', 'asc')
                        ->orderBy('heuredebut', 'asc');

                    if ($request->has('annee_acad') && $request->annee_acad) {
                        $q->where('annee_acad', $request->annee_acad);
                    }
                },
                'enseignant'
            ]);

        $ecusAvecEmplois = $query->get();

        return response()->json([
            'success' => true,
            'data' => [
                'filiere' => $filiere->only(['idFiliere', 'nom', 'annee']),
                'ecus' => $ecusAvecEmplois
            ]
        ]);
    }
}
