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

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

require_once('st_conexion.php');

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

// --------------------
// Recibir datos del formulario
// --------------------
$idUsuarioRecibe = $_POST['ID_USUARIO_RECIBE'] ?? null;
$idUsuarioSolicita = $_POST['ID_USUARIO_SOLICITA'] ?? null;
$proveedorRut = $_POST['PROVEEDOR_RUT'] ?? null;
$oc = $_POST['OC'] ?? null; // ahora opcional
$nota = $_POST['NOTA'] ?? '';
$costoTotal = $_POST['COSTO_TOTAL_CONTRATO'] ?? 0;
$solarr = $_POST['SOLARR'] ?? null;

// Arrays del detalle
$claves = $_POST['CLAVE_MAESTRO'] ?? [];
$nombres = $_POST['NOMBRE_MAESTRO'] ?? [];
$descripciones = $_POST['DESCRIPCION_MAESTRO'] ?? [];
$idTipos = $_POST['ID_TIPO_MAESTRO'] ?? [];
$proveedoresDetalle = $_POST['PROVEEDOR_MAESTRO'] ?? [];
$fechasEntrega = $_POST['FECHA_ENTREGA'] ?? [];
$diasArriendo = $_POST['DIAS_ARRIENDO'] ?? [];
$costosDia = $_POST['COSTO_DIA'] ?? [];

// Validación mínima
if(!$idUsuarioRecibe || !$idUsuarioSolicita || !$proveedorRut || empty($claves)){
    die("Faltan datos obligatorios");
}

// Validar que todos los arrays tengan la misma longitud
$detalleCount = count($claves);
if(!(
    $detalleCount === count($nombres) &&
    $detalleCount === count($descripciones) &&
    $detalleCount === count($idTipos) &&
    $detalleCount === count($proveedoresDetalle) &&
    $detalleCount === count($fechasEntrega) &&
    $detalleCount === count($diasArriendo) &&
    $detalleCount === count($costosDia)
)){
    die("Error: Los arrays del detalle no tienen la misma longitud");
}

try {
    $pdo->beginTransaction();

    // --------------------
    // 1. Insertar cabecera de arriendo
    // --------------------
    $stmtArriendo = $pdo->prepare("
        INSERT INTO HE_ARRIENDO_HDR 
        (ID_USUARIO_RECIBE, ID_USUARIO_SOLICITA, PROVEEDOR_RUT, OC, NOTA, COSTO_TOTAL_CONTRATO, ESTADO, SOLARR)
        VALUES (:recibe, :solicita, :proveedor, :oc, :nota, :costo, 0, :solarr)
    ");

    $stmtArriendo->execute([
        ':recibe' => $idUsuarioRecibe,
        ':solicita' => $idUsuarioSolicita,
        ':proveedor' => $proveedorRut,
        ':oc' => $oc,
        ':nota' => $nota,
        ':costo' => $costoTotal,
        ':solarr' => $solarr
    ]);

    $idArriendo = $pdo->lastInsertId();

    // --------------------
    // 2. Preparar inserción en HE_MAESTRO (evita duplicados)
    // --------------------
    $stmtCheckClave = $pdo->prepare("SELECT COUNT(*) FROM HE_MAESTRO WHERE CLAVE=:clave");
    $stmtMaestro = $pdo->prepare("
        INSERT INTO HE_MAESTRO 
        (CLAVE, NOMBRE, DESCRIPCION, ID_TIPO, PROVEEDOR_RUT, ESTADO_INV, SERIE, CODIGO_RF, ARRIENDO)
        VALUES (:clave, :nombre, :descripcion, :id_tipo, :proveedor_rut, 7, :serie, :codigo_rf, 1)
    ");

    // --------------------
    // 3. Preparar inserción en detalle de arriendo
    // --------------------
    $stmtDetalle = $pdo->prepare("
        INSERT INTO HE_ARRIENDO_DTL 
        (ID_ARRIENDO, CLAVE_MAESTRO, FECHA_ENTREGA, DIAS_ARRIENDO, COSTO_DIA)
        VALUES (:id_arriendo, :clave, :fecha_entrega, :dias, :costo_dia)
    ");

    for($i=0; $i<$detalleCount; $i++){
        $clave = $claves[$i];
        $serie = $clave;
        $codigo_rf = $clave;

        // Verificar si ya existe la clave
        $stmtCheckClave->execute([':clave'=>$clave]);
        $existe = $stmtCheckClave->fetchColumn();

        if(!$existe){
            // Insertar en HE_MAESTRO solo si no existe
            $stmtMaestro->execute([
                ':clave' => $clave,
                ':nombre' => $nombres[$i],
                ':descripcion' => $descripciones[$i],
                ':id_tipo' => $idTipos[$i],
                ':proveedor_rut' => $proveedoresDetalle[$i],
                ':serie' => $serie,
                ':codigo_rf' => $codigo_rf
            ]);
        }

        // Insertar en detalle de arriendo
        $stmtDetalle->execute([
            ':id_arriendo' => $idArriendo,
            ':clave' => $clave,
            ':fecha_entrega' => $fechasEntrega[$i],
            ':dias' => $diasArriendo[$i],
            ':costo_dia' => $costosDia[$i]
        ]);
    }

    $pdo->commit();

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

} catch (Exception $e) {
    $pdo->rollBack();
    die("Error al grabar el arriendo: " . $e->getMessage());
}
?>
