<?php

namespace App\Http\Controllers;

use App\Models\Utilisateur;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Hash;

class ProfileController extends Controller
{
    // Afficher la page de paramètres du profil
    public function settings()
    {
        /** @var Utilisateur $user */
        $user = Auth::user();
        return view('profile.settings', compact('user'));
    }

    // Mettre à jour le profil
    public function update(Request $request)
    {
        /** @var Utilisateur $user */
        $user = Auth::user();

        $request->validate([
            'Pseudo' => ['required', 'string', 'max:100', 'unique:utilisateurs,Pseudo,' . $user->ID_Utilisateur . ',ID_Utilisateur'],
            'Email' => ['required', 'string', 'email', 'max:255', 'unique:utilisateurs,Email,' . $user->ID_Utilisateur . ',ID_Utilisateur'],
            'MotDePasse_Actuel' => ['nullable', 'string'],
            'MotDePasse_Nouveau' => ['nullable', 'string', 'min:8', 'confirmed'],
        ], [
            'Pseudo.required' => 'Le pseudo est requis.',
            'Pseudo.unique' => 'Ce pseudo est déjà utilisé.',
            'Email.required' => 'L\'email est requis.',
            'Email.email' => 'Veuillez entrer une adresse email valide.',
            'Email.unique' => 'Cet email est déjà utilisé.',
            'MotDePasse_Actuel.required_with' => 'Vous devez entrer votre mot de passe actuel pour le modifier.',
            'MotDePasse_Nouveau.min' => 'Le mot de passe doit contenir au moins 8 caractères.',
            'MotDePasse_Nouveau.confirmed' => 'Les mots de passe ne correspondent pas.',
        ]);

        // Vérifier le mot de passe actuel si on veut le modifier
        if ($request->filled('MotDePasse_Nouveau')) {
            if (!Hash::check($request->MotDePasse_Actuel, $user->MotDePasse)) {
                return back()->withErrors([
                    'MotDePasse_Actuel' => 'Le mot de passe actuel est incorrect.',
                ])->onlyInput('Email', 'Pseudo');
            }
            $user->MotDePasse = Hash::make($request->MotDePasse_Nouveau);
        }

        // Mettre à jour le pseudo et l'email
        $user->Pseudo = $request->Pseudo;
        $user->Email = $request->Email;
        $user->save();

        return back()->with('success', 'Votre profil a été mis à jour avec succès!');
    }
}
