<?php
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);

header("Access-Control-Allow-Origin: *");
header("Access-Control-Allow-Methods: GET, POST, PUT, DELETE");

include_once '../conexion.php';

$bodyRequest = file_get_contents("php://input");
$datos = json_decode($bodyRequest, true);

if (json_last_error() != JSON_ERROR_NONE || !is_array($datos)) {
    print_json(array('ESTADO' => '0', 'MENSAJE' => 'Error en el formato JSON'));
    exit;
}

// Asegúrate de que hay suficientes elementos en $datos antes de preparar la consulta
if (count($datos) !== 27) {
    print_json(array('ESTADO' => '0', 'MENSAJE' => 'Número incorrecto de parámetros'));
    exit;
}

// Preparamos la consulta
$sql = $conn->prepare("CALL IM_MovCaja(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?, @result)");

if (!$sql) {
    print_json(array('ESTADO' => '0', 'MENSAJE' => 'Error al preparar la consulta: ' . $conn->error));
    exit;
}

// Bind de parámetros
$sql->bind_param(
    "ssisissssisssisissssssiiiis", 
    $datos[0],  // cTipoRecibo
    $datos[1],  // cNRecibo
    $datos[2],  // cOperacion_Id
    $datos[3],  // cFechaOpera
    $datos[4],  // cCuenta_Id
    $datos[5],  // cNombre
    $datos[6],  // cImporte
    $datos[7],  // cMoneda
    $datos[8],  // cTipoCambio
    $datos[9],  // cDocFis
    $datos[10], // cNSerie
    $datos[11], // cNDocumento
    $datos[12], // cFechaEmi
    $datos[13], // cPartida_Id
    $datos[14], // cNomPartida
    $datos[15], // cMov_Id
    $datos[16], // cOpera
    $datos[17], // cBanco
    $datos[18], // cCtaBancaria
    $datos[19], // cLugar
    $datos[20], // cNOperaBco
    $datos[21], // cObservacion
    $datos[22], // cCaja_Sunat
    $datos[23], // cEmpresa_Id
    $datos[24], // cSucursal_Id
    $datos[25], // _nIdMovCaja
    $datos[26]  // _cEstado
);

$sql->execute();
$sql->close();

// Obtener el resultado del procedimiento almacenado
$result = $conn->query("SELECT @result AS result");
if ($result) {
    $row = $result->fetch_assoc();
    $rowsAffected = $row['result'];

    if ($rowsAffected > 0) {
        print_json(array('ESTADO' => '1', 'MENSAJE' => 'Registro guardado/actualizado con éxito'));
    } else {
        print_json(array('ESTADO' => '0', 'MENSAJE' => 'No se realizaron cambios en la base de datos'));
    }
} else {
    print_json(array('ESTADO' => '0', 'MENSAJE' => 'Error al obtener el resultado del procedimiento almacenado'));
}

// Cerrar la conexión a la base de datos
mysqli_close($conn);

function print_json($data) {
    header("HTTP/1.1");
    header("Content-Type: application/json; charset=UTF-8");
    echo json_encode($data, JSON_PRETTY_PRINT);
}
?>
