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

try {

    /* =========================
       SÉCURITÉ UTILISATEUR
    ========================= */
    $utilisateur_id = $_SESSION['user']['id'] ?? null;
    if (!$utilisateur_id) {
        throw new Exception("Utilisateur non authentifié");
    }

    if ($_SERVER['REQUEST_METHOD'] !== 'POST') {
        throw new Exception("Méthode non autorisée");
    }

    /* =========================
       DONNÉES FORMULAIRE
    ========================= */
    $date_appro = $_POST['date_achat'] ?? date("Y-m-d H:i:s");
    $produits   = $_POST['produits'] ?? [];
    $depot_id = (int)($_POST['depot_id'] ?? 1);

    if (empty($produits) || !is_array($produits)) {
        throw new Exception("Aucun produit fourni");
    }

    /* =========================
       NUMÉRO APPRO
    ========================= */
    $annee = date("Y");
    $mois  = date("m");
    $sql = "SELECT COUNT(*) as nb 
            FROM appro 
            WHERE YEAR(date_appro) = :annee AND MONTH(date_appro) = :mois";
    $stmt = $conn->prepare($sql);
    $stmt->execute([
        ':annee' => $annee,
        ':mois'  => $mois
    ]);
    $row = $stmt->fetch(PDO::FETCH_ASSOC);
    $ordre = str_pad($row['nb'] + 1, 2, "0", STR_PAD_LEFT);
    $numero = "APPRO-" . $annee . "/" . $mois . "-" . $ordre;

    /* =========================
       TRANSACTION
    ========================= */
    $conn->beginTransaction();

    /* =========================
       INSERT TABLE appro
    ========================= */
    $stmt = $conn->prepare("
        INSERT INTO appro (numero, date_appro, depot_id,statut, annule, utilisateur_id, created_at)
        VALUES (?, ?,?, 'brouillon', 0, ?, NOW())
    ");
    $stmt->execute([$numero, $date_appro,$depot_id, $utilisateur_id]);
    $appro_id = $conn->lastInsertId();

    /* =========================
       INSERT APPRO_DETAILS + STOCK + MOUVEMENT
    ========================= */
    foreach ($produits as $ligne) {

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

        if ($produit_id <= 0 || $quantite <= 0) {
            continue;
        }

        // Vérifier produit
        $stmt = $conn->prepare("SELECT id FROM produits WHERE id = ?");
        $stmt->execute([$produit_id]);
        if (!$stmt->fetch()) {
            throw new Exception("Produit invalide (ID $produit_id)");
        }

        // Inserer dans appro_details
        $stmt = $conn->prepare("
            INSERT INTO appro_details (appro_id, produit_id, quantite)
            VALUES (?, ?, ?)
        ");
        $stmt->execute([$appro_id, $produit_id, $quantite]);

        // Stock
        $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,depot_id, quantite)
                VALUES (?, ?,?)
            ")->execute([$produit_id,$depot_id, $quantite]);
        }

        // Mouvement stock
        $conn->prepare("
            INSERT INTO mouvements_stock
            (produit_id,depot_dest_id, quantite, type, reference_table, reference_id, utilisateur_id, date_mouvement)
            VALUES (?, ?, ?, 'appro', 'appro', ?, ?, ?)
        ")->execute([$produit_id, $depot_id,$quantite, $appro_id, $utilisateur_id, $date_appro]);
    }

    $conn->commit();

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

/* =========================
   REDIRECTION
========================= */
header("Location: /eagle_client_istanbulcups/index.php?page=appros");
exit;
