<?php
session_start();

if (!isset($_SESSION['usuario'])) {
    header("Location: st_acceso.php");
    exit;
}

require_once('st_conexion.php'); // define $host, $db, $charset, $user, $pass

$dsn = "mysql:host=$host;dbname=$db;charset=$charset";
$options = [
    PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
    PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC
];

try {
    $pdo = new PDO($dsn, $user, $pass, $options);
} catch (PDOException $e) {
    die("Error de conexión: " . $e->getMessage());
}

// recoger datos del formulario
$idUsuarioEntrega = $_POST['id_usuario_entrega'] ?? null;
$idUsuarioRecibe  = $_POST['id_usuario_recibe'] ?? null;
$fechaInicio      = $_POST['fecha_inicio'] ?? null;
$horaInicio       = $_POST['hora_inicio'] ?? null;
$notaHdr          = $_POST['nota'] ?? '';

$claves = $_POST['clave_producto'] ?? [];
$notasEntrega = $_POST['nota_entrega'] ?? [];

// NUEVO → recibir firma
$firmaBase64 = $_POST['firma_base64'] ?? '';

if (!$idUsuarioEntrega || !$idUsuarioRecibe || empty($claves)) {
    die("Faltan datos obligatorios.");
}

try {

    // Iniciar transacción
    $pdo->beginTransaction();

    // ========================================
    // 1) Insertar encabezado (igual que antes)
    // ========================================
    $sqlHdr = "INSERT INTO HE_PRESTAMO_HDR
               (ID_USUARIO_ENTREGA, ID_USUARIO_RECIBE, FECHA_INICIO, HORA_INICIO, NOTA, ESTADO, FIRMA_ENTREGA)
               VALUES (:idEntrega, :idRecibe, :fechaIni, :horaIni, :nota, 1, '')";
    $stmtHdr = $pdo->prepare($sqlHdr);
    $stmtHdr->execute([
        ':idEntrega' => $idUsuarioEntrega,
        ':idRecibe'  => $idUsuarioRecibe,
        ':fechaIni'  => $fechaInicio,
        ':horaIni'   => $horaInicio,
        ':nota'      => $notaHdr
    ]);

    // obtener ID del préstamo recién insertado
    $idPrestamo = $pdo->lastInsertId();

    // ========================================
    // 2) Insertar detalle (igual que antes)
    // ========================================
    $sqlDtl = "INSERT INTO HE_PRESTAMO_DTL
               (ID_PRESTAMO, CLAVE_PRODUCTO, NOTA_ENTREGA, NOTA_DEVOLUCION, FECHA_DEVOLUCION, HORA_DEVOLUCION)
               VALUES (:idPrestamo, :clave, :notaEntrega, '', '', '')";
    $stmtDtl = $pdo->prepare($sqlDtl);

    $sqlUpdProd = "UPDATE HE_MAESTRO SET ESTADO_INV = :estadoPrestado WHERE CLAVE = :clave";
    $stmtUpdProd = $pdo->prepare($sqlUpdProd);

    foreach ($claves as $index => $clave) {
        $notaEntrega = $notasEntrega[$index] ?? '';

        $stmtDtl->execute([
            ':idPrestamo' => $idPrestamo,
            ':clave'      => $clave,
            ':notaEntrega'=> $notaEntrega
        ]);

        $stmtUpdProd->execute([
            ':estadoPrestado' => 1,
            ':clave'          => $clave
        ]);
    }

    // ========================================
    // 3) GUARDAR FIRMA EN /firmas/ID.png
    // ========================================
    if (!empty($firmaBase64)) {

        // limpiar base64
        $firmaBase64 = str_replace("data:image/png;base64,", "", $firmaBase64);
        $firmaBase64 = str_replace(" ", "+", $firmaBase64);
        $imagen = base64_decode($firmaBase64);

        if (!is_dir("firmas")) {
            mkdir("firmas", 0777, true);
        }

        $rutaFirma = "firmas/" . $idPrestamo . ".png";

        file_put_contents($rutaFirma, $imagen);

        // actualizar ruta de la firma en BD (campo FIRMA_ENTREGA)
        $stmtFirma = $pdo->prepare("UPDATE HE_PRESTAMO_HDR SET FIRMA_ENTREGA = :firma WHERE ID = :id");
        $stmtFirma->execute([
            ':firma' => $rutaFirma,
            ':id'    => $idPrestamo
        ]);
    }

    // ========================================
    // Confirmar transacción
    // ========================================
    $pdo->commit();

    echo "<script>alert('Préstamo guardado correctamente'); window.location='st_menuppl.php';</script>";

} catch (Exception $e) {
    $pdo->rollBack();
    die("Error al guardar préstamo: " . $e->getMessage());
}
?>
