<?php
session_start();
require '../../../script/conexion.php';
require '../../general/validacion.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);
}

$nombre_usuario      = post('nombre_usuario');
$id_venta            = post('id_venta');
$numero_venta        = post('numero_venta');
$referencia_producto = post('referencia_producto');
$talla               = post('talla');
$cantidad            = post('cantidad');
$precio_unidad       = post('precio_unidad');

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

if ($nombre_usuario === '') $errores[] = 'Falta nombre_usuario';

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

if ($numero_venta === '') $errores[] = 'Falta numero_venta';
if ($referencia_producto === '') $errores[] = 'Falta referencia_producto';
if ($talla === '') $errores[] = 'Falta talla';

if ($cantidad !== '' && (!is_numeric($cantidad) || (int)$cantidad < 0)) $errores[] = 'cantidad inválida';
$cantidad_int = (int)($cantidad === '' ? 0 : $cantidad);

if ($precio_unidad === '' || !is_numeric($precio_unidad) || (float)$precio_unidad < 0) $errores[] = 'precio_unidad inválido';
$precio_num = (float)$precio_unidad;

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

/* ---------------- Log descripción ---------------- */
$hoy = date("Y-m-d H:i:s");
$descripcion = "Venta Id: {$id_int} numero venta: {$numero_venta} Ref: {$referencia_producto} Talla: {$talla} Cant: {$cantidad_int} Precio unidad: {$precio_num} {$hoy}";

try {
    $conn->begin_transaction();

    /* 1) Delete seguro */
    $stmtDel = $conn->prepare("
        DELETE FROM alm_venta_detalle
        WHERE id_venta = ?
          AND referencia_producto = ?
          AND talla = ?
          AND precio_unidad = ?
    ");
    if (!$stmtDel) throw new Exception("Prepare delete: " . $conn->error);

    $stmtDel->bind_param("issd", $id_int, $referencia_producto, $talla, $precio_num);
    if (!$stmtDel->execute()) throw new Exception("Execute delete: " . $stmtDel->error);

    // Si quieres forzar que exista:
    // if ($stmtDel->affected_rows === 0) throw new Exception("No se encontró el item para eliminar");

    $stmtDel->close();

    /* 2) Recalcular inventario */
    $class_referencia = $referencia_producto;
    $class_talla = $talla;
    require '../../../clases/class-referencia.php';

    /* 3) Log de borrado (prepared) */
    $stmtLog = $conn->prepare("
        INSERT INTO alm_registro_delete (nombre_usuario, origen, descripcion)
        VALUES (?,?,?)
    ");
    if (!$stmtLog) throw new Exception("Prepare log: " . $conn->error);

    $origen = 'Venta detalle';
    $stmtLog->bind_param("sss", $nombre_usuario, $origen, $descripcion);
    if (!$stmtLog->execute()) throw new Exception("Execute log: " . $stmtLog->error);
    $stmtLog->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());
}
