<?php
require_once __DIR__ . '/config.php';

function validarToken() {
    $headers = function_exists('getallheaders') ? getallheaders() : [];

    // Fallback para servidores que no exponen getallheaders()
    if (empty($headers)) {
        foreach ($_SERVER as $k => $v) {
            if (str_starts_with($k, 'HTTP_')) {
                $key           = str_replace('_', '-', ucwords(strtolower(substr($k, 5)), '_'));
                $headers[$key] = $v;
            }
        }
    }

    $auth = $headers['Authorization'] ?? $headers['authorization'] ?? '';

    if (!preg_match('/^Bearer\s+(.+)$/i', trim($auth), $matches)) {
        jsonResponse(['error' => 'Token de autorización requerido'], 401);
    }

    $token = $matches[1];
    $parts = explode('.', $token);

    if (count($parts) !== 3) {
        jsonResponse(['error' => 'Token con formato inválido'], 401);
    }

    [$header, $payload, $sig] = $parts;

    $expectedSig = base64UrlEncode(hash_hmac('sha256', "$header.$payload", JWT_SECRET, true));

    if (!hash_equals($expectedSig, $sig)) {
        jsonResponse(['error' => 'Firma de token inválida'], 401);
    }

    $data = json_decode(base64UrlDecode($payload), true);

    if (!$data || !isset($data['exp']) || $data['exp'] < time()) {
        jsonResponse(['error' => 'Token expirado'], 401);
    }

    return (int)$data['negocio_id'];
}

// Versión extendida — retorna negocio_id + tipo_cuenta
function validarTokenCompleto() {
    $headers = function_exists('getallheaders') ? getallheaders() : [];
    if (empty($headers)) {
        foreach ($_SERVER as $k => $v) {
            if (str_starts_with($k, 'HTTP_')) {
                $key           = str_replace('_', '-', ucwords(strtolower(substr($k, 5)), '_'));
                $headers[$key] = $v;
            }
        }
    }
    $auth = $headers['Authorization'] ?? $headers['authorization'] ?? '';
    if (!preg_match('/^Bearer\s+(.+)$/i', trim($auth), $matches)) {
        jsonResponse(['error' => 'Token de autorización requerido'], 401);
    }
    $token = $matches[1];
    $parts = explode('.', $token);
    if (count($parts) !== 3) jsonResponse(['error' => 'Token inválido'], 401);
    [$header, $payload, $sig] = $parts;
    $expectedSig = base64UrlEncode(hash_hmac('sha256', "$header.$payload", JWT_SECRET, true));
    if (!hash_equals($expectedSig, $sig)) jsonResponse(['error' => 'Firma inválida'], 401);
    $data = json_decode(base64UrlDecode($payload), true);
    if (!$data || !isset($data['exp']) || $data['exp'] < time()) jsonResponse(['error' => 'Token expirado'], 401);
    return [
        'negocio_id'  => (int)$data['negocio_id'],
        'tipo_cuenta' => $data['tipo_cuenta'] ?? 'negocio',
    ];
}
