<?php
include('../includes/validador.php');
include('../conexiones/conex.php');
include('../includes/funciones.php');

// Variables principales
$proceso = $_POST['proceso'];
$meses = $_POST['mes_pago'];
$mesesIn = "'" . implode("','", array_map([$con, 'real_escape_string'], $meses)) . "'";
$monto_mora = isset($_POST['monto_mora']) && $_POST['monto_mora'] !== '' ? limpiar3($_POST['monto_mora']) : 0;
$formapago = $con->real_escape_string($_POST['forma_pago']);
$banco = $con->real_escape_string($_POST['nombre_banco']);
$numcheque = $con->real_escape_string($_POST['num_cheque']);
$montocheque = !empty($_POST['monto_cheque']) ? limpiar3($_POST['monto_cheque']) : 0;
$matricula = (int) $_POST['matricula'];
$idalum = (int) $_POST['idalumno'];
$curso = (int) $_POST['curso'];
$anho = (int) $_POST['anho'];
$factura = $con->real_escape_string($_POST['factura']);
$razon_social = $con->real_escape_string($_POST['razon_social']);
$ruc_ci = $con->real_escape_string($_POST['ruc_ci']);
$dir = $con->real_escape_string($_POST['direccion']);
$fechaAct = date("Y-m-d");
$montoct = $_POST['monto_cuota'];
$nuevo_monto_cuota = isset($_POST['monto_cuota']) && $_POST['monto_cuota'] !== '' ? limpiar3($_POST['monto_cuota']) : null;

// Verificar si ya hay pagos para la cuota seleccionada
$sqlCuota = "SELECT INTmatricula, intPersona, mesPago, monto_cuota, SUM(monto_pago) AS totalPG 
             FROM pagos_cuotas 
             WHERE intPersona = $idalum AND INTmatricula = $matricula AND mesPago IN ($mesesIn) AND estadoPago != 'cancelado'
             GROUP BY mesPago";
$queryCuota = $con->query($sqlCuota) or throw_ex(mysqli_error($con));
$fetchCuota = mysqli_fetch_assoc($queryCuota);

if ($fetchCuota) {
    $totalPagadoAct = $fetchCuota['totalPG'];
    $difPagar = $montoct - $totalPagadoAct;
    $montoab = $difPagar + $monto_mora;
} else {
    // Obtener monto de la cuota desde la tabla de matrícula
    $sqlMat = "SELECT montoCuota FROM matricula WHERE Matricula_id = $matricula";
    $resMat = $con->query($sqlMat) or throw_ex(mysqli_error($con));
    $rowMat = mysqli_fetch_assoc($resMat);

    $montoct = $rowMat ? $rowMat['montoCuota'] : 0;
    $montoab = $nuevo_monto_cuota + $monto_mora;
}

procesarPago(
    $con, $meses, $matricula, $idalum, $curso, $anho, $fechaAct,
    $montoct, $montoab, $formapago, $banco, $numcheque, $montocheque,
    $factura, $razon_social, $ruc_ci, $dir, $nuevo_monto_cuota
);


// ---------------------- Función para procesar -----------------------
function procesarPago(
    $con, $meses, $matricula, $idalum, $curso, $anho, $fechaAct,
    $montoct, $montoab, $formapago, $banco, $numcheque, $montocheque,
    $factura, $razon_social, $ruc_ci, $dir, $nuevo_monto_cuota
) {
    try {
        $con->autocommit(false);
        $con->query("BEGIN");

        foreach ($meses as $mespago) {
            $mespago = $con->real_escape_string($mespago);
            $queryAlum = "
                INSERT INTO pagos_cuotas (
                    INTmatricula, intPersona, intCurso, mesPago, INTAnhoLect, fechaPago,
                    monto_cuota, monto_pago, forma_pago, cheque_banco, num_cheque, monto_cheque,
                    num_factura, pago_nombre, pago_ruc_ci, pago_direccion
                ) VALUES (
                    $matricula, $idalum, $curso, '$mespago', $anho, '$fechaAct',
                    $nuevo_monto_cuota, $montoab, '$formapago', '$banco', '$numcheque', $montocheque,
                    '$factura', '$razon_social', '$ruc_ci', '$dir'
                )
            ";
            $con->query($queryAlum) or throw_ex(mysqli_error($con));
            $idpago = $con->insert_id;
        }

        // ✅ Actualizar el monto de la cuota en la tabla matricula si se recibió uno nuevo
        if ($nuevo_monto_cuota !== null && is_numeric($nuevo_monto_cuota)) {
            $updateCuota = "UPDATE matricula SET montoCuota = $nuevo_monto_cuota WHERE Matricula_id = $matricula";
            $con->query($updateCuota) or throw_ex(mysqli_error($con));
        }

        $con->commit();
        echo json_encode([0 => 1, 1 => $idpago]);
    } catch (Exception $e) {
        $con->rollback();
        echo json_encode([0 => 2, 1 => 'Error en transacción: ' . $e->getMessage()]);
    } finally {
        $con->close();
    }
}