<?php
include '../../../script/conexion.php';

$id_pedido               = isset($_POST['edit_id_pedido']) ? (int)$_POST['edit_id_pedido'] : 0;
$referencia_producto     = trim((string)($_POST['edit_referencia_producto'] ?? ''));
$referencia_producto_new = trim((string)($_POST['edit_referencia_producto_new'] ?? ''));

if ($id_pedido <= 0 || $referencia_producto === '') {
    exit('Parámetros inválidos');
}

$pedido = $conn->query("SELECT * FROM pedido WHERE id='$id_pedido'")->fetch_assoc();
if (!$pedido) {
    exit('Pedido no encontrado');
}

$conn->begin_transaction();

try {
    $tallas = [];
    $query = $conn->query("SELECT talla FROM pedido_detalle WHERE id_pedido='$id_pedido' AND referencia_producto='" . $conn->real_escape_string($referencia_producto) . "' GROUP BY talla ORDER BY talla ASC");
    while ($row = $query->fetch_assoc()) {
        $tallas[] = $row['talla'];
    }

    if (isset($_POST['editar'])) {
        if ($referencia_producto_new === '') {
            throw new Exception('Debes seleccionar la nueva referencia');
        }

        foreach ($tallas as $talla) {
            $sql = "UPDATE pedido_detalle SET referencia_producto='" . $conn->real_escape_string($referencia_producto_new) . "' WHERE id_pedido='$id_pedido' AND referencia_producto='" . $conn->real_escape_string($referencia_producto) . "' AND talla='" . $conn->real_escape_string($talla) . "'";
            if (!$conn->query($sql)) {
                throw new Exception($conn->error);
            }

            if ($conn->query("SHOW TABLES LIKE 'pedido_detalle_origen'")->num_rows > 0) {
                $sql = "UPDATE pedido_detalle_origen SET referencia_producto='" . $conn->real_escape_string($referencia_producto_new) . "' WHERE id_pedido='$id_pedido' AND referencia_producto='" . $conn->real_escape_string($referencia_producto) . "' AND talla='" . $conn->real_escape_string($talla) . "'";
                if (!$conn->query($sql)) {
                    throw new Exception($conn->error);
                }
            }

            foreach (['../../../clases/class-referencia.php', '../../../clases-fabrica/class-referencia.php'] as $path) {
                if (file_exists($path)) {
                    $class_referencia = $referencia_producto;
                    $class_talla = $talla;
                    include $path;
                    $class_referencia = $referencia_producto_new;
                    include $path;
                    break;
                }
            }

            foreach (['../../../clases/class-cierre.php', '../../../clases-fabrica/class-cierre.php'] as $path) {
                if (file_exists($path)) {
                    $class_nombre_tercero_cierre = $pedido['nombre_tercero'];
                    $class_referencia_cierre = $referencia_producto;
                    $class_talla_cierre = $talla;
                    include $path;
                    $class_referencia_cierre = $referencia_producto_new;
                    include $path;
                    break;
                }
            }
        }
    } elseif (isset($_POST['eliminar'])) {
        foreach ($tallas as $talla) {
            $sql = "DELETE FROM pedido_detalle WHERE id_pedido='$id_pedido' AND referencia_producto='" . $conn->real_escape_string($referencia_producto) . "' AND talla='" . $conn->real_escape_string($talla) . "'";
            if (!$conn->query($sql)) {
                throw new Exception($conn->error);
            }

            if ($conn->query("SHOW TABLES LIKE 'pedido_detalle_origen'")->num_rows > 0) {
                $sql = "DELETE FROM pedido_detalle_origen WHERE id_pedido='$id_pedido' AND referencia_producto='" . $conn->real_escape_string($referencia_producto) . "' AND talla='" . $conn->real_escape_string($talla) . "'";
                if (!$conn->query($sql)) {
                    throw new Exception($conn->error);
                }
            }

            foreach (['../../../clases/class-referencia.php', '../../../clases-fabrica/class-referencia.php'] as $path) {
                if (file_exists($path)) {
                    $class_referencia = $referencia_producto;
                    $class_talla = $talla;
                    include $path;
                    break;
                }
            }

            foreach (['../../../clases/class-cierre.php', '../../../clases-fabrica/class-cierre.php'] as $path) {
                if (file_exists($path)) {
                    $class_nombre_tercero_cierre = $pedido['nombre_tercero'];
                    $class_referencia_cierre = $referencia_producto;
                    $class_talla_cierre = $talla;
                    include $path;
                    break;
                }
            }
        }
    } else {
        throw new Exception('Acción no permitida');
    }

    $conn->commit();
    header("Location: ../pedido-detalle.php?id_pedido=$id_pedido");
    exit;
} catch (Throwable $e) {
    $conn->rollback();
    echo 'Error: ' . $e->getMessage();
}
