<?php
include_once '../config/database.php';

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

try {
    $database = new Database();
    $conn = $database->getConnection();
    
    $equipo_id = $_POST['equipo_id'] ?? null;
    $cantidad_meses = intval($_POST['cantidad_meses'] ?? 24);
    $fecha_entrega = $_POST['fecha_entrega'] ?? null;
    $fecha_iniciocobranza = $_POST['fecha_iniciocobranza'] ?? null;
    $fechapago = $_POST['fechapago'] ?? null;
    $dias_inicio_cobro = intval($_POST['dias_inicio_cobro'] ?? 0);
    $dias_ultimo = intval($_POST['dias_ultimo'] ?? 0);
    
    if (!$equipo_id) {
        throw new Exception('ID de equipo no proporcionado');
    }
    
    if (!$fecha_entrega || !$fecha_iniciocobranza || !$fechapago) {
        throw new Exception('Fechas requeridas no proporcionadas');
    }
    
    if ($cantidad_meses < 1 || $cantidad_meses > 120) {
        throw new Exception('Cantidad de meses debe estar entre 1 y 120');
    }
    
    // Verificar si ya existe un cronograma para este equipo
    $check_query = "SELECT COUNT(*) as count FROM tcronogramaequipo WHERE ID = ?";
    $check_stmt = $conn->prepare($check_query);
    $check_stmt->execute([$equipo_id]);
    $existing_count = $check_stmt->fetch(PDO::FETCH_ASSOC)['count'];
    
    if ($existing_count > 0) {
        throw new Exception('Ya existe un cronograma para este equipo');
    }
    
    // Obtener información del equipo para extraer el monto
    $equipo_query = "SELECT plan_a_evaluar FROM timportequipos WHERE id = ?";
    $equipo_stmt = $conn->prepare($equipo_query);
    $equipo_stmt->execute([$equipo_id]);
    $equipo = $equipo_stmt->fetch(PDO::FETCH_ASSOC);
    
    // Extraer el valor decimal del campo plan_a_evaluar
    $monto = 0.00;
    if ($equipo && !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]);
        }
    }
    
    // Usar los valores que vienen del frontend (ya calculados correctamente)
    $iniciocobro = $dias_inicio_cobro;
    $diasultimo = $dias_ultimo;
    
    // Debug: mostrar valores recibidos
    error_log("Backend recibido - iniciocobro: $iniciocobro, diasultimo: $diasultimo");
    error_log("Backend recibido - fecha_entrega: $fecha_entrega");
    error_log("Backend recibido - monto extraído: $monto");
    
    // Preparar la consulta de inserción incluyendo el monto
    $insert_query = "INSERT INTO tcronogramaequipo (nropago, fecha_entrega, fecha_iniciocobranza, fechapago, ID, estado, monto) 
                     VALUES (?, ?, ?, ?, ?,'PENDIENTE', ?)";
    $stmt = $conn->prepare($insert_query);
    
    $meses_generados = 0;
    $fecha_base_entrega = new DateTime($fecha_entrega);
    
    // Generar cronogramas para cada mes
    for ($mes = 1; $mes <= $cantidad_meses; $mes++) {
        // Calcular fechas para este mes
        $fecha_entrega_mes = clone $fecha_base_entrega;
        $fecha_entrega_mes->add(new DateInterval('P' . ($mes - 1) . 'M'));
        
        // fechapago = fecha_entrega + 1 mes - diasultimo días
        $fechapago_mes = clone $fecha_entrega_mes;
        $fechapago_mes->add(new DateInterval('P1M'));
        $fechapago_mes->sub(new DateInterval('P' . $diasultimo . 'D'));
        
        // fecha_iniciocobranza = fecha_entrega + 1 mes - iniciocobro días
        $fecha_iniciocobranza_mes = clone $fecha_entrega_mes;
        $fecha_iniciocobranza_mes->add(new DateInterval('P1M'));
        $fecha_iniciocobranza_mes->sub(new DateInterval('P' . $iniciocobro . 'D'));
        
        // Debug: mostrar fechas calculadas
        error_log("Mes $mes - fecha_entrega: " . $fecha_entrega_mes->format('Y-m-d') . 
                 ", fecha_iniciocobranza: " . $fecha_iniciocobranza_mes->format('Y-m-d') . 
                 ", fechapago: " . $fechapago_mes->format('Y-m-d'));
        
        // Insertar el cronograma para este mes
        $result = $stmt->execute([
            str_pad($mes, 18, '0', STR_PAD_LEFT), // nropago con formato de 18 caracteres
            $fecha_entrega_mes->format('Y-m-d'),
            $fecha_iniciocobranza_mes->format('Y-m-d'),
            $fechapago_mes->format('Y-m-d'),
            $equipo_id,
            $monto // Monto extraído del campo plan_a_evaluar
        ]);
        
        if ($result) {
            $meses_generados++;
        } else {
            throw new Exception("Error al insertar el cronograma para el mes $mes");
        }
    }
    
    if ($meses_generados > 0) {
        echo json_encode([
            'success' => true,
            'message' => 'Cronograma generado exitosamente',
            'meses_generados' => $meses_generados
        ]);
    } else {
        throw new Exception('No se pudo generar ningún cronograma');
    }
    
} catch (Exception $e) {
    echo json_encode([
        'success' => false,
        'message' => $e->getMessage()
    ]);
}
?>
