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


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

$stmt = $conn->prepare("
    SELECT id, caisse_id
    FROM sessions_caisse
    WHERE utilisateur_id = ?
      AND statut = 'ouverte'
    LIMIT 1
");
$stmt->execute([$utilisateur_id]);
$session = $stmt->fetch(PDO::FETCH_ASSOC);

if (!$session) {
    throw new Exception("Aucune session de caisse ouverte pour cet utilisateur");
}

$session_caisse_id = $session['id'];
$caisse_id = $session['caisse_id'];

$caisse_type_id = (int)$_POST['caisse_id'];
$type_operation = $_POST['type']; // entree | sortie
$categorie = trim($_POST['categorie']);
$montant = (float)$_POST['montant'];
$commentaire = trim($_POST['commentaire']);
//$utilisateur_id = $_SESSION['user']['id'];

if (!$caisse_type_id || $montant <= 0 || !in_array($type_operation, ['entree','sortie'])) {
    die("Données invalides");
}


try {
    $conn->beginTransaction();
    
      $stmt = $conn->prepare("
        SELECT id
        FROM modes_paiement
        WHERE type_caisse_id = ?
        LIMIT 1
    ");
    $stmt->execute([$caisse_type_id]);

    $mode_paiement_id = $stmt->fetchColumn();


    if (!$mode_paiement_id) {
        throw new Exception("Mode de paiement introuvable");
    }

    /* === AUTRE OPERATION METIER === */
    $stmt = $conn->prepare("
        INSERT INTO autres_operations
        (caisse_type_id, type, categorie, montant, commentaire, utilisateur_id, created_at)
        VALUES (?, ?, ?, ?, ?, ?, NOW())
    ");
    $stmt->execute([
        $caisse_type_id,
        $type_operation,
        $categorie,
        $montant,
        $commentaire,
        $utilisateur_id
    ]);

    $autre_operation_id = $conn->lastInsertId();

    /* === OPERATION CAISSE (UNE SEULE) === */
    $stmt = $conn->prepare("
        INSERT INTO operations_caisse (
            session_caisse_id,
            caisse_type_id,
            type_operation,
            montant,
            mode_paiement_id,
            reference_table,
            reference_id,
            description,
            utilisateur_id,
            date_operation
        )
        VALUES (?, ?, ?, ?, ?, 'autres_operations', ?, ?, ?, NOW())
    ");
    $stmt->execute([
        $session_caisse_id,
        $caisse_type_id,
        $type_operation,
        $montant,
        $mode_paiement_id,
        $autre_operation_id,
        $categorie . ($commentaire ? ' - '.$commentaire : ''),
        $utilisateur_id
    ]);

    /* === MAJ SOLDE === */
    $stmt = $conn->prepare("
        UPDATE caisse_types
        SET solde_actuel = solde_actuel " . ($type_operation === 'entree' ? '+' : '-') . " ?
        WHERE id = ?
    ");
    $stmt->execute([$montant, $caisse_type_id]);

    $conn->commit();

    header("Location: /eagle_client_istanbulcups/index.php?page=autres_operations&success=1");
    exit;

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

