<?php

namespace App\Http\Controllers;

use App\Models\Mouvement;
use App\Models\Vente;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;

class VenteController extends Controller
{
    /**
     * Liste des ventes de produit
     */
    public function index()
    {
        $ventes = Vente::with(['client', 'produit', 'magasin'])->latest()->paginate(10);
        return view('ventes.index', compact('ventes'));
    }

    /**
     * Ajouter une vente de produit.
     */
    public function store(Request $request)
    {
        $validated = $request->validate([
            'client_id' => 'required|exists:clients,id',
            'produit_id' => 'required|exists:produits,id',
            'magasin_id' => 'required|exists:magasins,id',
            'quantite' => 'required|integer|min:1',
            'montant' => 'required|numeric|min:0',
            'date_vente' => 'required|date',
        ]);

        return DB::transaction(function () use ($validated) {
            // Vérification stock disponible du produit dans le magasin
            $stockDisponible = Mouvement::stockActuel(
                $validated['produit_id'],
                $validated['magasin_id']
            );

            // Vérification si le stock disponible est suffisant pour la vente
            if ($stockDisponible < $validated['quantite']) {
                return redirect()->back()->with('error', 'Stock insuffisant.');
            }

            // Création de la vente
            $vente = Vente::create($validated);

            // Mouvement de sortie lié à la vente
            Mouvement::create([
                'produit_id' => $validated['produit_id'],
                'magasin_id' => $validated['magasin_id'],
                'type' => Mouvement::TYPE_SORTIE,
                'quantite' => $validated['quantite'],
            ]);

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

    /**
     * Display the specified resource.
     */
    public function show(string $id)
    {
        //
    }

    /**
     * Show the form for editing the specified resource.
     */
    public function edit(string $id)
    {
        //
    }

    /**
     * Update the specified resource in storage.
     */
    public function update(Request $request, string $id)
    {
        //
    }

    /**
     * Remove the specified resource from storage.
     */
    public function destroy(string $id)
    {
        //
    }
}
