<?php
/**
 * Script para procesar archivos TXT generados por el buque
 * 
 * Este script lee archivos TXT con datos CSV y los envía al servidor
 * 
 * Uso:
 * - Manual: php procesar_archivos_txt.php
 * - Automático: Configurar como cron job o servicio
 * 
 * Configuración:
 * 1. Define la carpeta donde el buque guarda los archivos TXT
 * 2. El script procesa los archivos y los mueve a una carpeta de "procesados"
 */

require_once 'config.php';

// ============================================
// CONFIGURACIÓN
// ============================================
// Carpeta donde el buque guarda los archivos TXT
$carpetaArchivos = __DIR__ . '/archivos_buque/';

// Carpeta para archivos procesados (opcional)
$carpetaProcesados = __DIR__ . '/archivos_buque/procesados/';

// URL del endpoint
$apiUrl = 'http://localhost/buque/api/buque.php'; // Cambiar en producción

// Si estás en producción, descomenta y ajusta:
// $protocol = isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] === 'on' ? 'https' : 'http';
// $host = $_SERVER['HTTP_HOST'] ?? 'www.devmastering.com';
// $apiUrl = $protocol . '://' . $host . '/webservices/buque/api/buque.php';

// Patrón de archivos a procesar (ejemplo: *.txt, datos_*.txt, etc.)
$patronArchivos = '*.txt';

// ============================================
// FUNCIONES
// ============================================

/**
 * Crear carpetas si no existen
 */
function crearCarpetas($carpetas) {
    foreach ($carpetas as $carpeta) {
        if (!is_dir($carpeta)) {
            mkdir($carpeta, 0755, true);
            echo "✅ Carpeta creada: $carpeta\n";
        }
    }
}

/**
 * Enviar datos al servidor
 */
function enviarDatos($url, $datos) {
    $ch = curl_init($url);
    curl_setopt($ch, CURLOPT_POST, true);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $datos);
    curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: text/plain']);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_TIMEOUT, 10);
    
    $response = curl_exec($ch);
    $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
    $error = curl_error($ch);
    curl_close($ch);
    
    if ($error) {
        return [
            'success' => false,
            'error' => $error,
            'http_code' => $httpCode
        ];
    }
    
    $jsonResponse = json_decode($response, true);
    
    return [
        'success' => $jsonResponse['success'] ?? false,
        'response' => $jsonResponse,
        'http_code' => $httpCode
    ];
}

/**
 * Procesar un archivo TXT
 */
function procesarArchivo($archivo, $apiUrl, $carpetaProcesados) {
    $nombreArchivo = basename($archivo);
    echo "\n📄 Procesando: $nombreArchivo\n";
    
    $lineas = file($archivo, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
    $enviados = 0;
    $errores = 0;
    
    foreach ($lineas as $numLinea => $linea) {
        $linea = trim($linea);
        
        // Saltar líneas vacías o comentarios
        if (empty($linea) || strpos($linea, '#') === 0) {
            continue;
        }
        
        // Validar formato básico (debe tener al menos 4 valores separados por coma)
        $valores = explode(',', $linea);
        if (count($valores) < 4) {
            echo "  ⚠️  Línea " . ($numLinea + 1) . " ignorada (formato inválido): $linea\n";
            $errores++;
            continue;
        }
        
        // Enviar datos
        echo "  📤 Enviando línea " . ($numLinea + 1) . "... ";
        
        $resultado = enviarDatos($apiUrl, $linea);
        
        if ($resultado['success'] && $resultado['response']['success']) {
            echo "✅ OK (ID: " . ($resultado['response']['data']['id'] ?? 'N/A') . ")\n";
            $enviados++;
        } else {
            $mensaje = $resultado['response']['message'] ?? $resultado['error'] ?? 'Error desconocido';
            echo "❌ Error: $mensaje\n";
            $errores++;
        }
        
        // Pequeña pausa entre envíos para no saturar el servidor
        usleep(100000); // 0.1 segundos
    }
    
    echo "  📊 Resumen: $enviados enviados, $errores errores\n";
    
    // Mover archivo a carpeta de procesados
    if (is_dir($carpetaProcesados)) {
        $archivoProcesado = $carpetaProcesados . $nombreArchivo . '.' . date('YmdHis');
        if (rename($archivo, $archivoProcesado)) {
            echo "  ✅ Archivo movido a procesados\n";
        }
    } else {
        // Si no hay carpeta de procesados, eliminar el archivo
        unlink($archivo);
        echo "  ✅ Archivo eliminado\n";
    }
    
    return ['enviados' => $enviados, 'errores' => $errores];
}

// ============================================
// PROGRAMA PRINCIPAL
// ============================================

echo "===========================================\n";
echo "Procesador de Archivos TXT - Sistema Buque\n";
echo "===========================================\n\n";

// Crear carpetas necesarias
crearCarpetas([$carpetaArchivos, $carpetaProcesados]);

// Buscar archivos TXT
$archivos = glob($carpetaArchivos . $patronArchivos);

if (empty($archivos)) {
    echo "📭 No se encontraron archivos TXT en: $carpetaArchivos\n";
    echo "   Patrón buscado: $patronArchivos\n";
    exit(0);
}

echo "📁 Archivos encontrados: " . count($archivos) . "\n";

$totalEnviados = 0;
$totalErrores = 0;

// Procesar cada archivo
foreach ($archivos as $archivo) {
    $resultado = procesarArchivo($archivo, $apiUrl, $carpetaProcesados);
    $totalEnviados += $resultado['enviados'];
    $totalErrores += $resultado['errores'];
}

// Resumen final
echo "\n===========================================\n";
echo "📊 Resumen Final\n";
echo "===========================================\n";
echo "Total enviados: $totalEnviados\n";
echo "Total errores: $totalErrores\n";
echo "Archivos procesados: " . count($archivos) . "\n";
echo "===========================================\n";

