<?php

namespace App\Http\Controllers\Api;

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

class EnseignantController extends Controller
{
    /**
     * Liste tous les enseignants
     * GET /api/v1/enseignants
     */
    public function index(Request $request): JsonResponse
    {
        $query = Enseignant::with(['grade'])
            ->enFonction();

        // Recherche par nom ou prénom
        if ($request->has('search') && $request->search) {
            $search = $request->search;
            $query->where(function ($q) use ($search) {
                $q->where('nom', 'like', "%{$search}%")
                    ->orWhere('prenom', 'like', "%{$search}%");
            });
        }

        $enseignants = $query->orderBy('nom', 'asc')->get();

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

    /**
     * Afficher un enseignant spécifique avec ses ECUs
     * GET /api/v1/enseignants/{matricule}
     */
    public function show(int $matricule): JsonResponse
    {
        $enseignant = Enseignant::with(['grade', 'ecus.filiere'])
            ->find($matricule);

        if (!$enseignant) {
            return response()->json([
                'success' => false,
                'message' => 'Enseignant non trouvé'
            ], 404);
        }

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

    /**
     * Récupérer l'emploi du temps d'un enseignant
     * GET /api/v1/enseignants/{matricule}/emplois-du-temps
     */
    public function emploisDuTemps(int $matricule, Request $request): JsonResponse
    {
        $enseignant = Enseignant::find($matricule);

        if (!$enseignant) {
            return response()->json([
                'success' => false,
                'message' => 'Enseignant non trouvé'
            ], 404);
        }

        $query = $enseignant->ecus()
            ->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);
                    }
                },
                'filiere'
            ]);

        $ecusAvecEmplois = $query->get();

        return response()->json([
            'success' => true,
            'data' => [
                'enseignant' => $enseignant->only(['matricule', 'nom', 'prenom']),
                'ecus' => $ecusAvecEmplois
            ]
        ]);
    }
}
