<?php
if (strlen(session_id()) < 1)
    session_start();

require_once "../config/Conexion.php";
require_once "../modelos/OdontPago.php";
require_once "../modelos/OdontCuota.php";

$pago = new OdontPago();
$cuota = new OdontCuota();

$idpago = isset($_POST["idpago"]) ? limpiarCadena($_POST["idpago"]) : "";
$idpresupuesto = isset($_POST["idpresupuesto"]) ? limpiarCadena($_POST["idpresupuesto"]) : "";
$monto = isset($_POST["monto"]) ? limpiarCadena($_POST["monto"]) : "";
$idforma_pago = isset($_POST["idforma_pago"]) ? limpiarCadena($_POST["idforma_pago"]) : "";
$numero_referencia = isset($_POST["numero_referencia"]) ? limpiarCadena($_POST["numero_referencia"]) : "";
$observaciones = isset($_POST["observaciones"]) ? limpiarCadena($_POST["observaciones"]) : "";
$idusuario = $_SESSION["idusuario"];

switch ($_GET["op"]) {
    case 'registrarPago':
        // Registrar el pago
        $idpago_nuevo = $pago->insertar($idpresupuesto, $monto, $idforma_pago, $numero_referencia, $observaciones, $idusuario);

        if ($idpago_nuevo) {
            // Verificar si el presupuesto tiene plan de cuotas
            $plan = $cuota->obtenerPlanPorPresupuesto($idpresupuesto);

            if ($plan) {
                // Aplicar pago a cuotas pendientes
                $pago->aplicarPagoACuotas($idpago_nuevo, $monto, $plan['idplan_cuotas']);
            }

            // Actualizar saldo pendiente del presupuesto
            $pago->actualizarSaldoPresupuesto($idpresupuesto);

            echo json_encode(array(
                'status' => true,
                'message' => 'Pago registrado correctamente',
                'idpago' => $idpago_nuevo
            ));
        } else {
            echo json_encode(array(
                'status' => false,
                'message' => 'Error al registrar el pago'
            ));
        }
        break;

    case 'listarPagos':
        $id = $_GET['id'];
        $rspta = $pago->listarPorPresupuesto($id);
        $data = array();

        while ($reg = $rspta->fetch_object()) {
            $data[] = array(
                "0" => date('d/m/Y H:i', strtotime($reg->fecha_pago)),
                "1" => $reg->forma_pago,
                "2" => $reg->numero_referencia ? $reg->numero_referencia : '-',
                "3" => '$' . number_format($reg->monto, 2),
                "4" => $reg->usuario,
                "5" => $reg->observaciones ? $reg->observaciones : '-'
            );
        }

        $results = array(
            "sEcho" => 1,
            "iTotalRecords" => count($data),
            "iTotalDisplayRecords" => count($data),
            "aaData" => $data
        );
        echo json_encode($results);
        break;

    case 'totalPagado':
        $id = $_GET['id'];
        $rspta = $pago->totalPagado($id);
        echo json_encode($rspta);
        break;

    case 'listarFormasPago':
        $rspta = $pago->listarFormasPago();
        while ($reg = $rspta->fetch_object()) {
            echo '<option value="' . $reg->idforma_pago . '">' . $reg->nombre . '</option>';
        }
        break;

    case 'crearPlanCuotas':
        $numero_cuotas = isset($_POST["numero_cuotas"]) ? limpiarCadena($_POST["numero_cuotas"]) : "";
        $monto_cuota = isset($_POST["monto_cuota"]) ? limpiarCadena($_POST["monto_cuota"]) : "";
        $fecha_inicio = isset($_POST["fecha_inicio"]) ? limpiarCadena($_POST["fecha_inicio"]) : "";
        $periodicidad = isset($_POST["periodicidad"]) ? limpiarCadena($_POST["periodicidad"]) : "";

        $rspta = $cuota->crearPlanCuotas($idpresupuesto, $numero_cuotas, $monto_cuota, $fecha_inicio, $periodicidad);
        echo $rspta ? "Plan de cuotas creado correctamente" : "Error al crear el plan de cuotas";
        break;

    case 'listarCuotas':
        $id = $_GET['id'];
        $plan = $cuota->obtenerPlanPorPresupuesto($id);

        if ($plan) {
            $rspta = $cuota->listarCuotasPorPlan($plan['idplan_cuotas']);
            $data = array();

            while ($reg = $rspta->fetch_object()) {
                $estado_badge = '';
                switch ($reg->estado) {
                    case 'Pagada':
                        $estado_badge = '<span class="label bg-green">Pagada</span>';
                        break;
                    case 'Pendiente':
                        $estado_badge = '<span class="label bg-blue">Pendiente</span>';
                        break;
                    case 'Vencida':
                        $estado_badge = '<span class="label bg-red">Vencida</span>';
                        break;
                    case 'Parcial':
                        $estado_badge = '<span class="label bg-orange">Parcial</span>';
                        break;
                }

                $data[] = array(
                    "0" => 'Cuota ' . $reg->numero_cuota,
                    "1" => date('d/m/Y', strtotime($reg->fecha_vencimiento)),
                    "2" => '$' . number_format($reg->monto, 2),
                    "3" => '$' . number_format($reg->monto_pagado, 2),
                    "4" => '$' . number_format($reg->monto - $reg->monto_pagado, 2),
                    "5" => $estado_badge
                );
            }

            $results = array(
                "sEcho" => 1,
                "iTotalRecords" => count($data),
                "iTotalDisplayRecords" => count($data),
                "aaData" => $data
            );
            echo json_encode($results);
        } else {
            echo json_encode(array("aaData" => array()));
        }
        break;

    case 'resumenCuotas':
        $id = $_GET['id'];
        $rspta = $cuota->resumenCuotas($id);
        echo json_encode($rspta);
        break;
}
?>