<?php
//Incluímos inicialmente la conexión a la base de datos
require "../config/Conexion.php";

class OdontCuota
{
    //Implementamos nuestro constructor
    public function __construct()
    {
    }

    //Crear plan de cuotas
    public function crearPlanCuotas($idpresupuesto, $numero_cuotas, $monto_cuota, $fecha_inicio, $periodicidad)
    {
        $sql = "INSERT INTO odont_plan_cuotas (idpresupuesto, numero_cuotas, monto_cuota, fecha_inicio, periodicidad, estado)
		VALUES ('$idpresupuesto', '$numero_cuotas', '$monto_cuota', '$fecha_inicio', '$periodicidad', 'Activo')";
        $idplan = ejecutarConsulta_retornarID($sql);

        if ($idplan) {
            // Generar las cuotas individuales
            $this->generarCuotas($idplan, $numero_cuotas, $monto_cuota, $fecha_inicio, $periodicidad);
        }

        return $idplan;
    }

    //Generar cuotas individuales
    private function generarCuotas($idplan_cuotas, $numero_cuotas, $monto_cuota, $fecha_inicio, $periodicidad)
    {
        $fecha_actual = new DateTime($fecha_inicio);

        // Determinar incremento según periodicidad
        $incremento = [
            'Semanal' => 'P7D',
            'Quincenal' => 'P15D',
            'Mensual' => 'P1M'
        ];

        $intervalo = new DateInterval($incremento[$periodicidad]);

        for ($i = 1; $i <= $numero_cuotas; $i++) {
            $fecha_vencimiento = $fecha_actual->format('Y-m-d');

            $sql = "INSERT INTO odont_cuota (idplan_cuotas, numero_cuota, monto, fecha_vencimiento, monto_pagado, estado)
                   VALUES ('$idplan_cuotas', '$i', '$monto_cuota', '$fecha_vencimiento', 0.00, 'Pendiente')";
            ejecutarConsulta($sql);

            $fecha_actual->add($intervalo);
        }

        return true;
    }

    //Listar cuotas de un plan
    public function listarCuotasPorPlan($idplan_cuotas)
    {
        $sql = "SELECT * FROM odont_cuota 
                WHERE idplan_cuotas = '$idplan_cuotas' 
                ORDER BY numero_cuota ASC";
        return ejecutarConsulta($sql);
    }

    //Obtener plan de cuotas de un presupuesto
    public function obtenerPlanPorPresupuesto($idpresupuesto)
    {
        $sql = "SELECT * FROM odont_plan_cuotas 
                WHERE idpresupuesto = '$idpresupuesto'";
        return ejecutarConsultaSimpleFila($sql);
    }

    //Listar cuotas vencidas
    public function listarCuotasVencidas()
    {
        $sql = "SELECT c.*, pc.idpresupuesto, 
                CONCAT(p.nombre, ' ', p.apaterno) as paciente,
                pr.total as total_presupuesto
                FROM odont_cuota c
                INNER JOIN odont_plan_cuotas pc ON c.idplan_cuotas = pc.idplan_cuotas
                INNER JOIN odont_presupuesto pr ON pc.idpresupuesto = pr.idpresupuesto
                INNER JOIN persona p ON pr.idpersona = p.idpersona
                WHERE c.estado IN ('Pendiente', 'Parcial', 'Vencida')
                AND c.fecha_vencimiento < CURDATE()
                ORDER BY c.fecha_vencimiento ASC";
        return ejecutarConsulta($sql);
    }

    //Actualizar estados de cuotas vencidas
    public function actualizarCuotasVencidas()
    {
        $sql = "UPDATE odont_cuota 
                SET estado = 'Vencida' 
                WHERE estado = 'Pendiente' 
                AND fecha_vencimiento < CURDATE()";
        return ejecutarConsulta($sql);
    }

    //Obtener resumen de cuotas de un presupuesto
    public function resumenCuotas($idpresupuesto)
    {
        $sql = "SELECT 
                COUNT(*) as total_cuotas,
                SUM(CASE WHEN estado = 'Pagada' THEN 1 ELSE 0 END) as cuotas_pagadas,
                SUM(CASE WHEN estado = 'Pendiente' THEN 1 ELSE 0 END) as cuotas_pendientes,
                SUM(CASE WHEN estado = 'Vencida' THEN 1 ELSE 0 END) as cuotas_vencidas,
                SUM(monto_pagado) as total_pagado_cuotas
                FROM odont_cuota c
                INNER JOIN odont_plan_cuotas pc ON c.idplan_cuotas = pc.idplan_cuotas
                WHERE pc.idpresupuesto = '$idpresupuesto'";
        return ejecutarConsultaSimpleFila($sql);
    }
}
