<?php
/**
 * Configuración FEL - Sistema Sufarma
 * ENTORNO: PRODUCCIÓN (LIVE)
 */

// Credenciales DIGIFACT - PRODUCCIÓN
define('FEL_NIT_EMISOR', '120429144');
define('FEL_RAZON_SOCIAL', 'FARMACIAS SUFARMA Y COPROPIEDAD'); // Asegúrate que este sea el nombre exacto en SAT
define('FEL_USUARIO', '120429144');
define('FEL_PASSWORD', '1Corintios13!');

// URLs de la API (Ambiente de PRODUCCIÓN)
define('FEL_API_URL', 'https://felgtaws.digifact.com.gt/gt.com.apinuc/api');
define('FEL_CERT_URL', 'https://felgtaws.digifact.com.gt/gt.com.apinuc/api/v2/transform/nuc_json');

// Configuración de Errores (En producción es mejor desactivar display_errors)
error_reporting(E_ALL);
ini_set('display_errors', 0);

/**
 * Función para obtener TOKEN con CACHÉ
 * Evita pedir un token nuevo en cada factura si el actual sigue vivo.
 */
function getFELToken()
{
    $cacheFile = __DIR__ . '/fel_token_cache.txt';

    // 1. Verificar si tenemos un token guardado y reciente (menos de 60 minutos)
    if (file_exists($cacheFile)) {
        $cachedData = json_decode(file_get_contents($cacheFile), true);
        if ($cachedData && (time() - $cachedData['time'] < 3600)) { // 3600 seg = 1 hora
            return $cachedData['token'];
        }
    }

    // 2. Si no hay cache o expiró, pedimos uno nuevo a Digifact
    $url = FEL_API_URL . "/login/get_token";

    // NOTA: El formato de usuario para Digifact es GT.NIT_PAD.USUARIO
    $nit_pad = str_pad(FEL_NIT_EMISOR, 12, "0", STR_PAD_LEFT);
    $username_construido = "GT." . $nit_pad . "." . FEL_USUARIO;

    $ch = curl_init($url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_POST, true);
    curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode([
        "Username" => $username_construido,
        "Password" => FEL_PASSWORD
    ]));
    curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
    curl_setopt($ch, CURLOPT_TIMEOUT, 10);

    $res = curl_exec($ch);
    $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
    curl_close($ch);

    if ($httpCode !== 200) {
        error_log("Error obteniendo token FEL: Código HTTP $httpCode");
        return null;
    }

    $data = json_decode($res, true);
    $token = $data['Token'] ?? null;

    // 3. Guardar el nuevo token en cache
    if ($token) {
        file_put_contents($cacheFile, json_encode([
            'token' => $token,
            'time' => time()
        ]));
    }

    return $token;
}
?>
