<?php
session_start();
require_once __DIR__ . "/../../config/db.php";

try {
    $user_id = $_SESSION['user']['id'] ?? null;
    if (!$user_id) throw new Exception("Utilisateur non authentifié");
    if ($_SERVER['REQUEST_METHOD'] !== 'POST') throw new Exception("Méthode non autorisée");

    $id         = (int)($_POST['id'] ?? 0);
    $produit_id = (int)($_POST['produit_id'] ?? 0);
    $quantite   = (float)($_POST['quantite'] ?? 0);

    if ($id <= 0 || $produit_id <= 0 || $quantite <= 0) throw new Exception("Données invalides");

    $stmt = $conn->prepare("SELECT produit_id, quantite FROM produits_finis WHERE id = ?");
    $stmt->execute([$id]);
    $old = $stmt->fetch(PDO::FETCH_ASSOC);
    if (!$old) throw new Exception("Produit fini non trouvé");

    $conn->beginTransaction();

    // Ajuster stock : retirer l'ancienne quantité
    $conn->prepare("UPDATE stock_depot SET quantite = quantite - ? WHERE produit_id = ?")->execute([$old['quantite'], $old['produit_id']]);

    // Ajouter nouvelle quantité
    $check = $conn->prepare("SELECT id, quantite FROM stock_depot WHERE produit_id = ?");
    $check->execute([$produit_id]);
    $stock = $check->fetch(PDO::FETCH_ASSOC);
    if ($stock) {
        $conn->prepare("UPDATE stock_depot SET quantite = quantite + ? WHERE id = ?")->execute([$quantite, $stock['id']]);
    } else {
        $conn->prepare("INSERT INTO stock_depot (produit_id, quantite) VALUES (?, ?)")->execute([$produit_id, $quantite]);
    }

    // Mettre à jour produit fini
    $conn->prepare("UPDATE produits_finis SET produit_id = ?, quantite = ? WHERE id = ?")->execute([$produit_id, $quantite, $id]);

    // Mouvement stock
    $conn->prepare("
        INSERT INTO mouvements_stock
        (produit_id, quantite, type, reference_table, reference_id, utilisateur_id, date_mouvement)
        VALUES (?, ?, 'produit_fini', 'produits_finis', ?, ?, NOW())
    ")->execute([$produit_id, $quantite, $id, $user_id]);

    $conn->commit();

} catch (Exception $e) {
    if ($conn->inTransaction()) $conn->rollBack();
    die("❌ Erreur Modifier Produit Fini : " . $e->getMessage());
}

header("Location: /eagle_client_istanbulcups/index.php?page=produits-finis");
exit;
