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

// Inclusión adaptativa de la base de datos idéntica a tu controlador de conceptos
if (file_exists('../modelo/Db.php')) {
    require_once '../modelo/Db.php';
} else {
    require_once '../modelo/clsbdd.php';
}

$bd = new clsbdd();
$action = isset($_GET['action']) ? $_GET['action'] : '';

switch ($action) {
    case 'generar_cobro':
        if ($_SERVER['REQUEST_METHOD'] === 'POST') {
            $bas_id = intval($_POST['bas_id'] ?? 0);
            $con_id = intval($_POST['con_id'] ?? 0);
            $cxc_valor_base = floatval($_POST['cxc_valor_base'] ?? 0);
            $cxc_fecha_emision = trim($_POST['cxc_fecha_emision'] ?? '');

            if ($bas_id > 0 && $con_id > 0 && $cxc_valor_base > 0 && !empty($cxc_fecha_emision)) {
                
                // Mapeo exacto según el volcado de la tabla bas_cuentas_cobrar:
                // cxc_id (AI), bas_id, con_id, cxc_valor_base, cxc_descuento, cxc_motivo_descuento, cxc_valor_final, cxc_saldo_pendiente, cxc_fecha_emision, cxc_estado
                $cxc_descuento = 0.00;
                $cxc_valor_final = $cxc_valor_base;
                $cxc_saldo_pendiente = $cxc_valor_base;
                $cxc_estado = 'PENDIENTE';

                // SQL limpio con las columnas reales de tu base de datos
                $sql = "INSERT INTO bas_cuentas_cobrar (
                            bas_id, 
                            con_id, 
                            cxc_valor_base, 
                            cxc_descuento, 
                            cxc_motivo_descuento,
                            cxc_valor_final, 
                            cxc_saldo_pendiente, 
                            cxc_fecha_emision, 
                            cxc_estado
                        ) VALUES (
                            $bas_id, 
                            $con_id, 
                            $cxc_valor_base, 
                            $cxc_descuento, 
                            NULL,
                            $cxc_valor_final, 
                            $cxc_saldo_pendiente, 
                            '$cxc_fecha_emision', 
                            '$cxc_estado'
                        )";

                if ($bd->ejecutar($sql)) {
                    header("Location: ../index.php?page=mensualidades/listar&msg=cobro_generado");
                    exit();
                } else {
                    header("Location: ../index.php?page=mensualidades/listar&msg=error_db");
                    exit();
                }
            } else {
                header("Location: ../index.php?page=mensualidades/listar&msg=invalid_data");
                exit();
            }
        }
        break;

    case 'registrar_pago':
        if ($_SERVER['REQUEST_METHOD'] === 'POST') {
            $cxc_id = intval($_POST['cxc_id'] ?? 0);
            $pag_monto = floatval($_POST['pag_monto'] ?? 0);
            $pag_metodo = trim($_POST['pag_metodo'] ?? 'EFECTIVO'); 

            if ($cxc_id > 0 && $pag_monto > 0) {
                
                // 1. Consultar el saldo actual de la obligación
                $sql_cxc = "SELECT cxc_saldo_pendiente FROM bas_cuentas_cobrar WHERE cxc_id = $cxc_id";
                $res_cxc = $bd->ejecutar($sql_cxc);
                
                if ($res_cxc && $res_cxc->num_rows > 0) {
                    $cxc = $res_cxc->fetch_assoc();
                    $saldo_actual = floatval($cxc['cxc_saldo_pendiente']);
                    
                    // Calcular el nuevo saldo restante
                    $nuevo_saldo = $saldo_actual - $pag_monto;
                    if ($nuevo_saldo < 0) { $nuevo_saldo = 0; } 
                    
                    // Determinar el nuevo estado
                    $nuevo_estado = ($nuevo_saldo <= 0) ? 'PAGADO' : 'PENDIENTE';
                    
                    // 2. Actualizar la cuenta por cobrar en la base de datos
                    $sql_update = "UPDATE bas_cuentas_cobrar SET 
                                        cxc_saldo_pendiente = $nuevo_saldo,
                                        cxc_estado = '$nuevo_estado'
                                   WHERE cxc_id = $cxc_id";
                    
                    if ($bd->ejecutar($sql_update)) {
                        
                        // 3. Insertar registro obligatorio en bas_pagos
                        // Columnas reales de bas_pagos: pag_id (AI), cxc_id, pag_monto, pag_metodo, pag_fecha (current_timestamp)
                        $sql_pago = "INSERT INTO bas_pagos (
                                        cxc_id, 
                                        pag_monto, 
                                        pag_metodo
                                     ) VALUES (
                                        $cxc_id, 
                                        $pag_monto, 
                                        '$pag_metodo'
                                     )";
                        $bd->ejecutar($sql_pago);
                        
                        header("Location: ../index.php?page=mensualidades/listar&msg=pago_registrado");
                        exit();
                    } else {
                        header("Location: ../index.php?page=mensualidades/listar&msg=error_update");
                        exit();
                    }
                } else {
                    header("Location: ../index.php?page=mensualidades/listar&msg=cobro_no_encontrado");
                    exit();
                }
            } else {
                header("Location: ../index.php?page=mensualidades/listar&msg=invalid_pago");
                exit();
            }
        }
        break;

    default:
        header("Location: ../index.php?page=mensualidades/listar");
        exit();
}