<?php

namespace App\Http\Controllers;

use App\Models\Client;
use Illuminate\Http\Request;

class ClientController extends Controller
{
    /**
     * Liste des clients.
     */
    public function index()
    {
        $clients = Client::latest()->paginate(10);

        return view('clients.index', compact('clients'));
    }

    /**
     * Détails d'un client.
     */
    public function show(string $id)
    {
        $client = Client::with(['ventes.produit', 'ventes.magasin'])
            ->findOrFail(Client::keyFromHashId($id));

        return view('clients.show', compact('client'));
    }

    /**
     * Show the form for creating a new resource.
     */
    public function create()
    {
        //
    }

    /**
     * Enregistrement d'un nouveau client
     */
    public function store(Request $request)
    {
        $validated = $request->validate([
            'nom' => 'required|string|max:255',
            'telephone' => 'required|string|min:10',
            'adresse' => 'nullable|string|max:150',
            'caution' => 'required|numeric|min:0',
        ]);

        $client = Client::create($validated);

        return redirect()->route('clients.index')->with('success', 'Client créé avec succès');
    }

    /**
     * Mise à jour des informations du client
     */
    public function update(Request $request, string $id)
    {
        $validated = $request->validate([
            'nom' => 'required|string|max:255',
            'telephone' => 'required|string|min:10',
            'adresse' => 'nullable|string|max:150',
            'caution' => 'required|numeric|min:0',
        ]);

        //Vérifie si le client existe
        $client = Client::findOrFail($id);
        //Met à jour les informations du client
        $client->update($validated);

        return redirect()->route('clients.index')->with('success', 'Client mis à jour avec succès');
    }

    /**
     * Suppression du client
     */
    public function destroy(string $id)
    {
        //Vérifie si le client existe
        $client = Client::findOrFail($id);
        //Suppression du client
        $client->delete();
        return redirect()->route('clients.index')->with('success', 'Client supprimé avec succès');
    }
}