<?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 {
            // Verificar que el registro pertenece a la empresa del usuario y no tiene cronograma
            $stmt_verificar = $conn->prepare("
                SELECT e.*, c.ID as tiene_cronograma 
                FROM timportequipos e 
                LEFT JOIN tcronogramaequipo c ON e.id = c.ID 
                WHERE e.id = ? AND e.codempresa = ? AND c.ID IS NULL
            ");
            $stmt_verificar->execute([$id, $codempresaUsuario]);
            $equipo = $stmt_verificar->fetch(PDO::FETCH_ASSOC);
            
            if (!$equipo) {
                $errores[] = "ID $id: Registro no encontrado, sin permisos o ya tiene cronograma";
                continue;
            }
            
            // Verificar que tiene fecha de entrega
            if (!$equipo['fecha_entrega']) {
                $errores[] = "ID $id: No tiene fecha de entrega";
                continue;
            }
            
            // Extraer el valor decimal del campo plan_a_evaluar
            $monto = 0.00;
            if (!empty($equipo['plan_a_evaluar'])) {
                // Buscar números decimales en el texto (puede contener texto y números)
                // Patrón: busca números con punto o coma como separador decimal
                // Ejemplos: "99.90", "99,90", "Plan 99.90", "S/ 99.90"
                $texto = $equipo['plan_a_evaluar'];
                // Reemplazar coma por punto para estandarizar
                $texto = str_replace(',', '.', $texto);
                // Buscar el primer número decimal encontrado
                if (preg_match('/(\d+\.?\d*)/', $texto, $matches)) {
                    $monto = floatval($matches[1]);
                }
            }
            
            // Calcular fechas base
            $fechaEntrega = new DateTime($equipo['fecha_entrega']);
            
            // Calcular fecha de inicio de cobranza: fecha_entrega + 1 mes - iniciocobro días
            $fechaInicioCobranza = clone $fechaEntrega;
            $fechaInicioCobranza->modify('+1 month');
            $fechaInicioCobranza->modify("-{$diasInicioCobro} days");
            
            // Calcular fecha de pago: fecha_entrega + 1 mes - diasultimo días
            $fechaPago = clone $fechaEntrega;
            $fechaPago->modify('+1 month');
            $fechaPago->modify("-{$diasUltimo} days");
            
            // 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 tcronogramaequipo
                $stmt_cronograma = $conn->prepare("
                    INSERT INTO tcronogramaequipo (
                        nropago, fecha_entrega, fecha_iniciocobranza, fechapago, 
                        estado, ID, monto, codempleado
                    ) VALUES (?, ?, ?, ?, 'Pendiente', ?, ?, ?)
                ");
                
                $stmt_cronograma->execute([
                    $mes,
                    $fechaEntrega->format('Y-m-d'),
                    $fechaInicioCobranzaMes->format('Y-m-d'),
                    $fechaPagoMes->format('Y-m-d'),
                    $id,
                    $monto, // Monto extraído del campo plan_a_evaluar
                    $_SESSION['user']['codempleado']
                ]);
            }
            
            $procesados++;
            
        } catch (PDOException $e) {
            $errores[] = "ID $id: Error al crear cronograma - " . $e->getMessage();
        }
    }
    
    $response = [
        'success' => true,
        'procesados' => $procesados,
        'total' => count($ids),
        'cantidad_meses' => $cantidadMeses,
        'errores' => $errores
    ];
    
    if (!empty($errores)) {
        $response['message'] = "Se procesaron $procesados de " . count($ids) . " registros. Errores: " . implode(', ', $errores);
    }
    
    echo json_encode($response);
    
} catch (Exception $e) {
    echo json_encode([
        'success' => false,
        'message' => $e->getMessage()
    ]);
}
?>
