<?php
session_start();
include_once '../config/database.php';

header('Content-Type: application/json');

try {
    $database = new Database();
    $conn = $database->getConnection();
    
    // Verificar que se recibieron los datos necesarios
    if (!isset($_POST['ids']) || !isset($_POST['cantidad_meses'])) {
        throw new Exception('Faltan datos necesarios');
    }
    
    $ids = json_decode($_POST['ids'], true);
    $cantidadMeses = intval($_POST['cantidad_meses']);
    
    if (!is_array($ids) || empty($ids)) {
        throw new Exception('Lista de IDs inválida');
    }
    
    if ($cantidadMeses < 1 || $cantidadMeses > 120) {
        throw new Exception('Cantidad de meses inválida (1-120)');
    }
    
    // Obtener la empresa del usuario logueado
    $codempresaUsuario = null;
    $stmt_empresa = $conn->prepare("SELECT codempresa FROM templeado WHERE codempleado = ?");
    $stmt_empresa->execute([$_SESSION['user']['codempleado']]);
    $resultado_empresa = $stmt_empresa->fetch(PDO::FETCH_ASSOC);
    if ($resultado_empresa) {
        $codempresaUsuario = $resultado_empresa['codempresa'];
    }
    
    if (!$codempresaUsuario) {
        throw new Exception('No se pudo verificar la empresa del usuario');
    }
    
    // Obtener información de la empresa para calcular fechas
    $stmt_empresa_info = $conn->prepare("SELECT iniciocobro, diasultimo FROM tempresa WHERE codempresa = ?");
    $stmt_empresa_info->execute([$codempresaUsuario]);
    $empresaInfo = $stmt_empresa_info->fetch(PDO::FETCH_ASSOC);
    
    if (!$empresaInfo) {
        throw new Exception('No se pudo obtener la configuración de la empresa');
    }
    
    $diasInicioCobro = intval($empresaInfo['iniciocobro'] ?? 0);
    $diasUltimo = intval($empresaInfo['diasultimo'] ?? 0);
    
    $procesados = 0;
    $errores = [];
    
    // Procesar cada registro
    foreach ($ids as $id) {
        try {
            error_log("=== INICIANDO PROCESAMIENTO ID $id ===");
            
            // Verificar que el registro pertenece a la empresa del usuario y no tiene cronograma
            $stmt_verificar = $conn->prepare("
                SELECT v.*, c.id as tiene_cronograma 
                FROM timportventas v 
                LEFT JOIN tcronogramaventas c ON v.id = c.id 
                WHERE v.id = ? AND v.codempresa = ? AND c.id IS NULL
            ");
            $stmt_verificar->execute([$id, $codempresaUsuario]);
            $venta = $stmt_verificar->fetch(PDO::FETCH_ASSOC);
            
            if (!$venta) {
                $errores[] = "ID $id: Registro no encontrado, sin permisos o ya tiene cronograma";
                error_log("ID $id: Registro no encontrado o ya tiene cronograma");
                continue;
            }
            
            // Debug: Log del registro encontrado
            error_log("ID $id: Registro encontrado - " . json_encode($venta));
            
            // Verificar que tiene fecha de instalación
            if (!$venta['fecha_instalacion']) {
                $errores[] = "ID $id: No tiene fecha de instalación";
                error_log("ID $id: No tiene fecha de instalación");
                continue;
            }
            
            error_log("ID $id: Fecha instalación: " . $venta['fecha_instalacion']);
            
            // Calcular fechas base
            $fechaInstalacion = new DateTime($venta['fecha_instalacion']);
            error_log("ID $id: Fecha instalación procesada: " . $fechaInstalacion->format('Y-m-d'));
            
            // Calcular fecha de inicio de cobranza: fecha_instalacion + 1 mes - iniciocobro días
            $fechaInicioCobranza = clone $fechaInstalacion;
            $fechaInicioCobranza->modify('+1 month');
            $fechaInicioCobranza->modify("-{$diasInicioCobro} days");
            
            // Calcular fecha de pago: fecha_instalacion + 1 mes - diasultimo días
            $fechaPago = clone $fechaInstalacion;
            $fechaPago->modify('+1 month');
            $fechaPago->modify("-{$diasUltimo} days");
            
            error_log("ID $id: Fecha inicio cobranza: " . $fechaInicioCobranza->format('Y-m-d'));
            error_log("ID $id: Fecha pago base: " . $fechaPago->format('Y-m-d'));
            
            // Obtener monto - usar valor por defecto ya que no hay tabla tplan
            $monto = 50.00; // Valor por defecto
            error_log("ID $id: Usando monto por defecto: $monto");
            
            // Generar cronograma para la cantidad de meses especificada
            for ($mes = 1; $mes <= $cantidadMeses; $mes++) {
                // Calcular fecha de pago para este mes
                $fechaPagoMes = clone $fechaPago;
                $fechaPagoMes->modify("+{$mes} month");
                
                // Calcular fecha de inicio de cobranza para este mes
                $fechaInicioCobranzaMes = clone $fechaInicioCobranza;
                $fechaInicioCobranzaMes->modify("+{$mes} month");
                
                // Insertar cuota en tcronogramaventas
                $stmt_cronograma = $conn->prepare("
                    INSERT INTO tcronogramaventas (
                        id, nropago, fechapago, monto, estado, pagadofecha, fecha_entrega, fecha_iniciocobranza
                    ) VALUES (?, ?, ?, ?, 'PENDIENTE', NULL, ?, ?)
                ");
                
                $stmt_cronograma->execute([
                    $id,
                    $mes,
                    $fechaPagoMes->format('Y-m-d'),
                    $monto,
                    $fechaInicioCobranzaMes->format('Y-m-d'),
                    $fechaInicioCobranzaMes->format('Y-m-d')
                ]);
            }
            
            $procesados++;
            error_log("ID $id: PROCESADO EXITOSAMENTE - $cantidadMeses cuotas creadas");
            
        } catch (PDOException $e) {
            $errorMsg = "ID $id: Error al crear cronograma - " . $e->getMessage();
            $errores[] = $errorMsg;
            error_log("Error PDO para ID $id: " . $e->getMessage());
        } catch (Exception $e) {
            $errorMsg = "ID $id: Error general - " . $e->getMessage();
            $errores[] = $errorMsg;
            error_log("Error general para ID $id: " . $e->getMessage());
        }
    }
    
    error_log("=== RESUMEN FINAL ===");
    error_log("Total IDs recibidos: " . count($ids));
    error_log("Registros procesados exitosamente: $procesados");
    error_log("Total errores: " . count($errores));
    if (!empty($errores)) {
        error_log("Errores: " . implode('; ', $errores));
    }
    
    $response = [
        'success' => true,
        'procesados' => $procesados,
        'total' => count($ids),
        'cantidad_meses' => $cantidadMeses,
        'errores' => $errores,
        'debug' => [
            'ids_recibidos' => $ids,
            'empresa_usuario' => $codempresaUsuario,
            'dias_inicio_cobro' => $diasInicioCobro,
            'dias_ultimo' => $diasUltimo,
            'registros_procesados' => $procesados,
            'total_errores' => count($errores)
        ]
    ];
    
    if (!empty($errores)) {
        $response['message'] = "Se procesaron $procesados de " . count($ids) . " registros. Errores: " . implode(', ', $errores);
    } else {
        $response['message'] = "Se procesaron $procesados de " . count($ids) . " registros correctamente";
    }
    
    echo json_encode($response);
    
} catch (Exception $e) {
    echo json_encode([
        'success' => false,
        'message' => $e->getMessage()
    ]);
}
?>
