<?php

namespace App\Http\Controllers\Candidat;

use App\Http\Controllers\Controller;
use App\Http\Resources\CandidatResource;
use App\Models\Candidat;
use Illuminate\Http\Request;
use Illuminate\Http\JsonResponse;

class ProfilController extends Controller
{
    /**
     * GET /api/candidat/profil
     * Retourne le profil du candidat avec statut et parrain
     */
    public function show(Request $request): JsonResponse
    {
        $candidat = $request->user()->candidat()
            ->with('ville', 'quartierDomicile', 'parrain')
            ->firstOrFail();
        
        return response()->json([
            'user' => $request->user(),
            'candidat' => new CandidatResource($candidat)
        ]);
    }

    /**
     * PUT /api/candidat/profil
     * Mise à jour des infos de base du candidat
     */
    public function update(Request $request): JsonResponse
    {
        $candidat = $request->user()->candidat()->firstOrFail();

        $request->validate([
            'nom' => ['sometimes', 'string', 'max:100'],
            'prenom' => ['sometimes', 'string', 'max:100'],
            'date_naissance' => ['sometimes', 'nullable', 'date'],
            'sexe' => ['sometimes', 'nullable', 'in:femme,homme'],
            'nationalite' => ['sometimes', 'nullable', 'string', 'max:100'],
            'telephone' => ['sometimes', 'string', 'max:30'],
            'type_situation' => ['sometimes', 'in:residente,non_residente'],
            'disponibilite' => ['sometimes', 'array'],
            'disponibilite.*' => ['string', 'in:lundi,mardi,mercredi,jeudi,vendredi,samedi,dimanche'],
            'description' => ['sometimes', 'nullable', 'string', 'max:1000'],
            'quartier_domicile_id' => ['sometimes', 'nullable', 'exists:quartiers,id'],
            'ville_id' => ['sometimes', 'exists:villes,id'],
            'adresse_domicile' => ['sometimes', 'nullable', 'string'],
        ]);

        // Ne pas permettre de modifier le statut (réservé à l'admin)
        $allowedFields = [
            'nom', 'prenom', 'date_naissance', 'sexe', 'nationalite',
            'telephone', 'type_situation', 'disponibilite', 'description',
            'quartier_domicile_id', 'ville_id', 'adresse_domicile',
        ];

        $candidat->update($request->only($allowedFields));

        return response()->json([
            'message' => 'Profil mis à jour avec succès',
            'candidat' => new CandidatResource($candidat->load('ville', 'quartierDomicile', 'parrain'))
        ]);
    }
}
