<?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');
$estado   = post('estado');

/* ---------------- Validaciones ---------------- */
$errores = [];

if ($id_venta === '' || !ctype_digit($id_venta) || (int)$id_venta <= 0) $errores[] = 'id_venta inválido';

$estados_validos = ['Proceso', 'Confirmado', 'Finalizado', 'Cancelado'];
if ($estado === '' || !in_array($estado, $estados_validos, true)) $errores[] = 'Estado inválido';

if ($errores) {
    http_response_code(400);
    exit('Error: ' . implode(', ', $errores));
}

$id_int = (int)$id_venta;

try {
    $conn->begin_transaction();

    /* 1) Traer tercero (para cierre) */
    $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) Actualizar encabezado */
    $stmt1 = $conn->prepare("UPDATE alm_venta SET estado = ? WHERE id = ? LIMIT 1");
    if (!$stmt1) throw new Exception("Prepare update venta: " . $conn->error);

    $stmt1->bind_param("si", $estado, $id_int);
    if (!$stmt1->execute()) throw new Exception("Execute update venta: " . $stmt1->error);
    $stmt1->close();

    /* 3) Actualizar detalle */
    $stmt2 = $conn->prepare("UPDATE alm_venta_detalle SET estado = ? WHERE id_venta = ?");
    if (!$stmt2) throw new Exception("Prepare update detalle: " . $conn->error);

    $stmt2->bind_param("si", $estado, $id_int);
    if (!$stmt2->execute()) throw new Exception("Execute update detalle: " . $stmt2->error);
    $stmt2->close();

    /* 4) Recalcular por cada ref+talla (DISTINCT) */
    $stmt3 = $conn->prepare("
        SELECT DISTINCT referencia_producto, talla
        FROM alm_venta_detalle
        WHERE id_venta = ?
    ");
    if (!$stmt3) throw new Exception("Prepare select items: " . $conn->error);

    $stmt3->bind_param("i", $id_int);
    $stmt3->execute();
    $res3 = $stmt3->get_result();

    while ($row3 = $res3->fetch_assoc()) {
        $class_referencia = $row3['referencia_producto'];
        $class_talla = $row3['talla'];
        require '../../../clases/class-referencia.php';

        $class_nombre_tercero_cierre = $rowt['nombre_tercero'];
        $class_referencia_cierre = $row3['referencia_producto'];
        $class_talla_cierre = $row3['talla'];
        require '../../../clases/class-cierre.php';
    }
    $stmt3->close();

    $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());
}
