<?php
session_start();
require '../../../script/conexion.php';

ini_set('display_errors', 0);
error_reporting(E_ALL);

if ($_SERVER['REQUEST_METHOD'] !== 'POST') {
    http_response_code(405);
    exit('Método no permitido');
}

function post($k, $default = '') {
    return trim($_POST[$k] ?? $default);
}

$id_venta = post('id_venta');

/* ---------------- Validaciones ---------------- */
if ($id_venta === '' || !ctype_digit($id_venta) || (int)$id_venta <= 0) {
    http_response_code(400);
    exit('Error: id_venta inválido');
}

$id_int = (int)$id_venta;

try {
    $conn->begin_transaction();

    /* 1) Traer venta (tercero) */
    $stmtV = $conn->prepare("SELECT nombre_tercero FROM alm_venta WHERE id = ? LIMIT 1");
    if (!$stmtV) throw new Exception("Prepare venta: " . $conn->error);

    $stmtV->bind_param("i", $id_int);
    $stmtV->execute();
    $rowt = $stmtV->get_result()->fetch_assoc();
    $stmtV->close();

    if (!$rowt) {
        throw new Exception("La venta no existe");
    }

    /* 2) Traer items (DISTINCT para recalcular solo una vez por ref+talla) */
    $stmtItems = $conn->prepare("
        SELECT DISTINCT referencia_producto, talla
        FROM alm_venta_detalle
        WHERE id_venta = ?
    ");
    if (!$stmtItems) throw new Exception("Prepare items: " . $conn->error);

    $stmtItems->bind_param("i", $id_int);
    $stmtItems->execute();
    $resItems = $stmtItems->get_result();

    $items = [];
    while ($r = $resItems->fetch_assoc()) {
        $items[] = $r; // ['referencia_producto'=>..., 'talla'=>...]
    }
    $stmtItems->close();

    /* 3) Borrar todo el detalle en lote */
    $stmtDel = $conn->prepare("DELETE FROM alm_venta_detalle WHERE id_venta = ?");
    if (!$stmtDel) throw new Exception("Prepare delete: " . $conn->error);

    $stmtDel->bind_param("i", $id_int);
    if (!$stmtDel->execute()) throw new Exception("Execute delete: " . $stmtDel->error);
    $stmtDel->close();

    /* 4) Recalcular por cada referencia+talla afectada */
    foreach ($items as $it) {
        $class_referencia = $it['referencia_producto'];
        $class_talla = $it['talla'];
        require '../../../clases/class-referencia.php';

        $class_nombre_tercero_cierre = $rowt['nombre_tercero'];
        $class_referencia_cierre = $it['referencia_producto'];
        $class_talla_cierre = $it['talla'];
        require '../../../clases/class-cierre.php';
    }

    $conn->commit();

    header("Location: ../venta-detalle.php?id_venta=" . $id_int);
    exit;

} catch (Exception $e) {
    $conn->rollback();
    http_response_code(500);
    exit("Error: " . $e->getMessage());
}
