<?php
// api/config.php
header('Content-Type: application/json');
header('Access-Control-Allow-Origin: *');
header('Access-Control-Allow-Methods: GET, POST, PUT, DELETE, OPTIONS');
header('Access-Control-Allow-Headers: Content-Type, Authorization, X-API-Key, X-Tenant-ID');

require_once __DIR__ . '/../conexao.php';

// Função para responder com JSON
function jsonResponse($data, $statusCode = 200) {
    http_response_code($statusCode);
    echo json_encode($data, JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT);
    exit;
}

// Função para validar API Key
function validarAPIKey() {
    $headers = getallheaders();
    
    // Verificar API Key no header
    if (!isset($headers['X-API-Key'])) {
        jsonResponse(['erro' => 'API Key não fornecida'], 401);
    }
    
    $apiKey = $headers['X-API-Key'];
    
    // Verificar Tenant ID no header (obrigatório para tenants)
    $tenantId = isset($headers['X-Tenant-ID']) ? (int)$headers['X-Tenant-ID'] : null;
    
    global $conn;
    
    // Buscar API Key no banco
    $stmt = $conn->prepare("
        SELECT ak.*, t.nome as tenant_nome, t.plano_id 
        FROM api_keys ak
        JOIN tenants t ON ak.tenant_id = t.id
        WHERE ak.api_key = ? AND ak.ativo = 1 
        AND (ak.data_expiracao IS NULL OR ak.data_expiracao > NOW())
    ");
    $stmt->bind_param("s", $apiKey);
    $stmt->execute();
    $result = $stmt->get_result();
    
    if ($result->num_rows === 0) {
        jsonResponse(['erro' => 'API Key inválida ou expirada'], 401);
    }
    
    $keyData = $result->fetch_assoc();
    $stmt->close();
    
    // Se o tenant foi especificado no header, verificar se corresponde
    if ($tenantId && $tenantId !== $keyData['tenant_id']) {
        jsonResponse(['erro' => 'Tenant ID não corresponde à API Key'], 403);
    }
    
    return [
        'tenant_id' => $keyData['tenant_id'],
        'tenant_nome' => $keyData['tenant_nome'],
        'api_key_id' => $keyData['id'],
        'plano_id' => $keyData['plano_id']
    ];
}

// Função para validar método HTTP
function validarMetodo($metodoPermitido) {
    if ($_SERVER['REQUEST_METHOD'] !== $metodoPermitido) {
        jsonResponse(['erro' => 'Método não permitido'], 405);
    }
}

// Função para obter dados do corpo da requisição
function getRequestBody() {
    $input = file_get_contents('php://input');
    $data = json_decode($input, true);
    
    if (json_last_error() !== JSON_ERROR_NONE) {
        jsonResponse(['erro' => 'JSON inválido: ' . json_last_error_msg()], 400);
    }
    
    return $data;
}

// Configurar charset
$conn->set_charset("utf8");
$conn->query("SET NAMES 'utf8'");
?>