<?php
/**
 * SAC 2026 - SYNC EXTERNAL DB
 * Sincroniza las tasas desde la base de datos maestra en tecnomath.com
 */
require_once 'config.php';

// Verificación de seguridad
try {
    checkAccess(['admin', 'programmer', 'board']);
} catch (Exception $e) {
    response(["error" => "No autorizado"], 401);
}

// Configuración de la base de datos externa (Proporcionada por el usuario)
$ext_host = 'tecnomath.com';
$ext_db   = 'tecnoma1_tasas';
$ext_user = 'tecnoma1_amathison';
$ext_pass = 'Info@2000';
$ext_charset = 'utf8mb4';

$dsn = "mysql:host=$ext_host;dbname=$ext_db;charset=$ext_charset";
$options = [
    PDO::ATTR_ERRMODE            => PDO::ERRMODE_EXCEPTION,
    PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
    PDO::ATTR_EMULATE_PREPARES   => false,
];

try {
    // Conectar a la DB externa
    $ext_pdo = new PDO($dsn, $ext_user, $ext_pass, $options);
    
    // Obtener las tasas de la DB externa (asumiendo tabla 'exchange_rates' o similar)
    // El usuario dijo "bajar esa base de datos", asumo que la estructura es compatible o similar.
    // Si no conocemos la tabla exacta, intentamos 'exchange_rates' que es el estándar del sistema.
    $stmt = $ext_pdo->query("SELECT * FROM exchange_rates ORDER BY date DESC LIMIT 100");
    $external_rates = $stmt->fetchAll();
    
    if (empty($external_rates)) {
        response(["success" => false, "error" => "No se encontraron datos en la base de datos externa."], 404);
    }

    // Insertar/Actualizar en la DB local
    $pdo->beginTransaction();
    
    $sql = "INSERT INTO exchange_rates (date, am_value, pm_value, parallel_value) 
            VALUES (:date, :am, :pm, :parallel) 
            ON DUPLICATE KEY UPDATE am_value = :am_upd, pm_value = :pm_upd, parallel_value = :parallel_upd";
    $local_stmt = $pdo->prepare($sql);
    
    $count = 0;
    foreach ($external_rates as $rate) {
        $date = $rate['date'];
        $am = (float)($rate['am_value'] ?? $rate['amValue'] ?? 0);
        $pm = (float)($rate['pm_value'] ?? $rate['pmValue'] ?? 0);
        $parallel = (float)($rate['parallel_value'] ?? $rate['parallelValue'] ?? $pm);
        
        $local_stmt->execute([
            ':date' => $date,
            ':am' => $am,
            ':pm' => $pm,
            ':parallel' => $parallel,
            ':am_upd' => $am,
            ':pm_upd' => $pm,
            ':parallel_upd' => $parallel
        ]);
        $count++;
    }
    
    $pdo->commit();
    
    logSystemAction("SINCRONIZACIÓN EXTERNA EXITOSA: $count registros procesados.", "TASAS");
    
    response([
        "success" => true, 
        "count" => $count,
        "message" => "Sincronización completada exitosamente desde tecnomath.com"
    ]);

} catch (PDOException $e) {
    if (isset($pdo) && $pdo->inTransaction()) $pdo->rollBack();
    response([
        "error" => "Error de conexión o consulta con la base de datos externa",
        "details" => $e->getMessage()
    ], 500);
}
?>