<?php
// =============================================
// ARQUIVO: testar_api_focus.php
// LOCAL: Coloque na raiz do seu projeto
// =============================================

ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);

// =============================================
// FUNÇÃO PARA CONSULTAR NOTA NA API FOCUS
// =============================================
function consultarNotaFocus($ref, $token, $ambiente = 'homologacao') {
    // Definir URL base conforme ambiente
    if ($ambiente == 'producao') {
        $baseUrl = 'https://api.focusnfe.com.br/v2';
    } else {
        $baseUrl = 'https://homologacao.focusnfe.com.br/v2';
    }
    
    // Endpoint para consultar NFS-e
    $url = $baseUrl . '/nfsen/' . urlencode($ref);
    
    // Iniciar cURL
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_HTTPHEADER, [
        'Authorization: Basic ' . base64_encode($token . ':'),
        'Content-Type: application/json',
        'Accept: application/json'
    ]);
    curl_setopt($ch, CURLOPT_TIMEOUT, 30);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
    curl_setopt($ch, CURLOPT_HEADER, true); // Incluir headers para debug
    
    // Executar requisição
    $response = curl_exec($ch);
    $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
    $curlError = curl_error($ch);
    $headerSize = curl_getinfo($ch, CURLINFO_HEADER_SIZE);
    
    // Separar headers e body
    $headers = substr($response, 0, $headerSize);
    $body = substr($response, $headerSize);
    
    curl_close($ch);
    
    return [
        'http_code' => $httpCode,
        'headers' => $headers,
        'body' => $body,
        'curl_error' => $curlError,
        'url' => $url
    ];
}

// =============================================
// PROCESSAR REQUISIÇÃO
// =============================================
$resultado = null;
$ref_consulta = '';
$token_consulta = '';
$erro = null;

if ($_SERVER['REQUEST_METHOD'] == 'POST' && isset($_POST['ref'])) {
    $ref_consulta = trim($_POST['ref']);
    $token_consulta = trim($_POST['token'] ?? '');
    
    if (empty($ref_consulta)) {
        $erro = 'Por favor, digite uma referência.';
    } elseif (empty($token_consulta)) {
        $erro = 'Por favor, digite o Token de acesso.';
    } else {
        // Fazer a consulta
        $resultado = consultarNotaFocus($ref_consulta, $token_consulta, 'homologacao');
    }
}

// =============================================
// TOKEN PADRÃO (se quiser pré-preencher)
// =============================================
$tokenPadrao = ''; // Coloque seu token padrão aqui se quiser
?>

<!DOCTYPE html>
<html lang="pt-BR">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Teste API Focus - NFS-e</title>
    <style>
        * {
            margin: 0;
            padding: 0;
            box-sizing: border-box;
        }
        body {
            font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
            background: #0a0a1a;
            color: #e0e0e0;
            padding: 20px;
            min-height: 100vh;
        }
        .container {
            max-width: 1400px;
            margin: 0 auto;
        }
        h1 {
            color: #00ff88;
            border-bottom: 2px solid #00ff88;
            padding-bottom: 10px;
            margin-bottom: 30px;
            display: flex;
            align-items: center;
            gap: 10px;
        }
        h1 small {
            font-size: 14px;
            color: #888;
            font-weight: normal;
        }
        .card {
            background: #1a1a2e;
            border: 1px solid #2a2a4a;
            border-radius: 12px;
            padding: 25px;
            margin-bottom: 20px;
            box-shadow: 0 4px 20px rgba(0, 0, 0, 0.4);
        }
        .card-title {
            color: #44aaff;
            font-size: 18px;
            font-weight: 600;
            margin-bottom: 15px;
            display: flex;
            align-items: center;
            gap: 10px;
        }
        .form-group {
            margin-bottom: 15px;
        }
        label {
            display: block;
            margin-bottom: 5px;
            color: #aaa;
            font-size: 14px;
            font-weight: 500;
        }
        input[type="text"], 
        input[type="password"] {
            width: 100%;
            padding: 12px 15px;
            background: #0d0d20;
            border: 1px solid #2a2a4a;
            border-radius: 8px;
            color: #e0e0e0;
            font-size: 15px;
            font-family: 'Courier New', monospace;
            transition: border-color 0.3s;
        }
        input[type="text"]:focus,
        input[type="password"]:focus {
            outline: none;
            border-color: #44aaff;
            box-shadow: 0 0 0 3px rgba(68, 170, 255, 0.1);
        }
        .btn {
            padding: 12px 30px;
            border: none;
            border-radius: 8px;
            font-size: 16px;
            font-weight: 600;
            cursor: pointer;
            transition: all 0.3s;
            display: inline-flex;
            align-items: center;
            gap: 8px;
        }
        .btn-primary {
            background: #44aaff;
            color: #0a0a1a;
        }
        .btn-primary:hover {
            background: #66bbff;
            transform: translateY(-2px);
            box-shadow: 0 4px 15px rgba(68, 170, 255, 0.3);
        }
        .btn-danger {
            background: #ff4466;
            color: white;
        }
        .btn-danger:hover {
            background: #ff6688;
            transform: translateY(-2px);
        }
        .btn-success {
            background: #00ff88;
            color: #0a0a1a;
        }
        .btn-success:hover {
            background: #44ffaa;
            transform: translateY(-2px);
        }
        .btn-secondary {
            background: #2a2a4a;
            color: #e0e0e0;
        }
        .btn-secondary:hover {
            background: #3a3a5a;
        }
        .row {
            display: flex;
            gap: 20px;
            flex-wrap: wrap;
        }
        .col {
            flex: 1;
            min-width: 300px;
        }
        .result-box {
            background: #0d0d20;
            border-radius: 8px;
            padding: 15px;
            margin-top: 10px;
            overflow: auto;
        }
        .result-box pre {
            margin: 0;
            white-space: pre-wrap;
            word-wrap: break-word;
            font-size: 13px;
            line-height: 1.6;
            font-family: 'Courier New', monospace;
        }
        .status-badge {
            display: inline-block;
            padding: 4px 12px;
            border-radius: 20px;
            font-size: 13px;
            font-weight: 600;
        }
        .status-success {
            background: #00ff88;
            color: #0a0a1a;
        }
        .status-error {
            background: #ff4466;
            color: white;
        }
        .status-warning {
            background: #ffaa44;
            color: #0a0a1a;
        }
        .status-info {
            background: #44aaff;
            color: #0a0a1a;
        }
        .json-viewer {
            background: #0d0d20;
            padding: 15px;
            border-radius: 8px;
            overflow: auto;
            max-height: 500px;
        }
        .json-viewer .key {
            color: #ffaa44;
        }
        .json-viewer .string {
            color: #00ff88;
        }
        .json-viewer .number {
            color: #44aaff;
        }
        .json-viewer .boolean {
            color: #ff66ff;
        }
        .json-viewer .null {
            color: #888;
        }
        .json-viewer .bracket {
            color: #ffffff;
        }
        .info-grid {
            display: grid;
            grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
            gap: 15px;
            margin-top: 10px;
        }
        .info-item {
            background: #0d0d20;
            padding: 12px;
            border-radius: 8px;
            border-left: 3px solid #44aaff;
        }
        .info-item .label {
            font-size: 11px;
            color: #888;
            text-transform: uppercase;
            letter-spacing: 0.5px;
        }
        .info-item .value {
            font-size: 16px;
            font-weight: 600;
            margin-top: 5px;
            font-family: 'Courier New', monospace;
        }
        .loading {
            display: none;
            text-align: center;
            padding: 20px;
        }
        .loading .spinner {
            width: 40px;
            height: 40px;
            border: 4px solid #2a2a4a;
            border-top: 4px solid #44aaff;
            border-radius: 50%;
            animation: spin 1s linear infinite;
            margin: 0 auto;
        }
        @keyframes spin {
            0% { transform: rotate(0deg); }
            100% { transform: rotate(360deg); }
        }
        .alert {
            padding: 15px 20px;
            border-radius: 8px;
            margin-bottom: 15px;
            border-left: 4px solid;
        }
        .alert-danger {
            background: #2a0a1a;
            border-color: #ff4466;
            color: #ff6688;
        }
        .alert-success {
            background: #0a2a1a;
            border-color: #00ff88;
            color: #44ffaa;
        }
        .alert-info {
            background: #0a1a2a;
            border-color: #44aaff;
            color: #88ccff;
        }
        .badge {
            display: inline-block;
            padding: 2px 10px;
            border-radius: 12px;
            font-size: 11px;
            font-weight: 600;
        }
        .badge-homolog {
            background: #ffaa44;
            color: #0a0a1a;
        }
        .badge-prod {
            background: #00ff88;
            color: #0a0a1a;
        }
        .mt-2 { margin-top: 10px; }
        .mt-3 { margin-top: 15px; }
        .mb-2 { margin-bottom: 10px; }
        .mb-3 { margin-bottom: 15px; }
        .text-center { text-align: center; }
        .text-muted { color: #888; }
        .text-success { color: #00ff88; }
        .text-danger { color: #ff4466; }
        .text-info { color: #44aaff; }
        .gap-2 { gap: 10px; }
        .d-flex { display: flex; }
        .align-center { align-items: center; }
        .flex-wrap { flex-wrap: wrap; }
        .token-input {
            font-family: 'Courier New', monospace;
            letter-spacing: 1px;
        }
        .copy-btn {
            background: none;
            border: none;
            color: #44aaff;
            cursor: pointer;
            padding: 2px 8px;
            font-size: 12px;
        }
        .copy-btn:hover {
            color: #88ccff;
            text-decoration: underline;
        }
    </style>
</head>
<body>
    <div class="container">
        <h1>
            🚀 Teste API Focus - NFS-e
            <small>Modo Homologação</small>
        </h1>

        <!-- Formulário -->
        <div class="card">
            <div class="card-title">
                🔍 Consultar Nota Fiscal
                <span class="badge badge-homolog">HOMOLOGAÇÃO</span>
            </div>
            
            <form method="POST" id="formConsulta">
                <div class="row">
                    <div class="col">
                        <div class="form-group">
                            <label for="ref">📌 Referência da Nota</label>
                            <input type="text" id="ref" name="ref" 
                                   placeholder="Ex: NF_20260619_150953_49321"
                                   value="<?php echo htmlspecialchars($ref_consulta); ?>"
                                   required>
                            <small class="text-muted">Digite a referência da nota que deseja consultar</small>
                        </div>
                    </div>
                    <div class="col">
                        <div class="form-group">
                            <label for="token">🔑 Token de Acesso</label>
                            <input type="password" id="token" name="token" 
                                   class="token-input"
                                   placeholder="Digite seu token Focus"
                                   value="<?php echo htmlspecialchars($token_consulta ?: $tokenPadrao); ?>"
                                   required>
                            <small class="text-muted">Token de autenticação da API Focus</small>
                        </div>
                    </div>
                </div>
                
                <div class="d-flex gap-2 flex-wrap">
                    <button type="submit" class="btn btn-primary" id="btnBuscar">
                        <span>🔍</span> Buscar Nota
                    </button>
                    <button type="button" class="btn btn-secondary" onclick="limparFormulario()">
                        <span>🗑️</span> Limpar
                    </button>
                    <button type="button" class="btn btn-info" onclick="carregarExemplo()">
                        <span>📋</span> Carregar Exemplo
                    </button>
                </div>
            </form>
        </div>

        <!-- Loading -->
        <div class="loading" id="loading">
            <div class="spinner"></div>
            <p class="mt-2 text-muted">Consultando API Focus...</p>
        </div>

        <!-- Resultado -->
        <?php if ($erro): ?>
            <div class="alert alert-danger">
                <strong>❌ Erro:</strong> <?php echo htmlspecialchars($erro); ?>
            </div>
        <?php endif; ?>

        <?php if ($resultado): ?>
            <div class="card">
                <div class="card-title">
                    📊 Resumo da Consulta
                    <span class="badge <?php echo $resultado['http_code'] == 200 ? 'badge-homolog' : 'badge-prod'; ?>">
                        HTTP <?php echo $resultado['http_code']; ?>
                    </span>
                </div>

                <!-- Status da Requisição -->
                <div class="info-grid">
                    <div class="info-item">
                        <div class="label">Status HTTP</div>
                        <div class="value">
                            <?php if ($resultado['http_code'] == 200): ?>
                                <span class="text-success">✅ <?php echo $resultado['http_code']; ?> - OK</span>
                            <?php elseif ($resultado['http_code'] == 404): ?>
                                <span class="text-danger">❌ <?php echo $resultado['http_code']; ?> - Não Encontrado</span>
                            <?php elseif ($resultado['http_code'] == 401): ?>
                                <span class="text-danger">❌ <?php echo $resultado['http_code']; ?> - Não Autorizado</span>
                            <?php else: ?>
                                <span class="text-warning">⚠️ <?php echo $resultado['http_code']; ?></span>
                            <?php endif; ?>
                        </div>
                    </div>
                    <div class="info-item">
                        <div class="label">Referência</div>
                        <div class="value" style="font-size:14px;"><?php echo htmlspecialchars($ref_consulta); ?></div>
                    </div>
                    <div class="info-item">
                        <div class="label">Ambiente</div>
                        <div class="value">
                            <span class="badge badge-homolog">HOMOLOGAÇÃO</span>
                        </div>
                    </div>
                    <div class="info-item">
                        <div class="label">Endpoint</div>
                        <div class="value" style="font-size:12px; word-break:break-all;">
                            <?php echo htmlspecialchars($resultado['url']); ?>
                        </div>
                    </div>
                </div>

                <?php if ($resultado['curl_error']): ?>
                    <div class="alert alert-danger mt-2">
                        <strong>⚠️ Erro cURL:</strong> <?php echo htmlspecialchars($resultado['curl_error']); ?>
                    </div>
                <?php endif; ?>

                <?php
                // Tentar decodificar o JSON da resposta
                $dados = json_decode($resultado['body'], true);
                $jsonValido = ($dados !== null);
                ?>

                <!-- Status da Nota (se JSON válido) -->
                <?php if ($jsonValido && isset($dados['status'])): ?>
                    <div class="alert alert-success mt-2">
                        <strong>✅ Nota encontrada!</strong>
                        <div class="info-grid mt-2">
                            <div class="info-item">
                                <div class="label">Status</div>
                                <div class="value">
                                    <span class="status-badge <?php echo $dados['status'] == 'autorizado' ? 'status-success' : 'status-warning'; ?>">
                                        <?php echo strtoupper($dados['status']); ?>
                                    </span>
                                </div>
                            </div>
                            <?php if (isset($dados['numero'])): ?>
                                <div class="info-item">
                                    <div class="label">Número NFS-e</div>
                                    <div class="value"><?php echo htmlspecialchars($dados['numero']); ?></div>
                                </div>
                            <?php endif; ?>
                            <?php if (isset($dados['data_emissao'])): ?>
                                <div class="info-item">
                                    <div class="label">Data Emissão</div>
                                    <div class="value"><?php echo htmlspecialchars($dados['data_emissao']); ?></div>
                                </div>
                            <?php endif; ?>
                            <?php if (isset($dados['url_danfse'])): ?>
                                <div class="info-item">
                                    <div class="label">PDF</div>
                                    <div class="value" style="font-size:12px;">
                                        <a href="<?php echo htmlspecialchars($dados['url_danfse']); ?>" target="_blank" style="color:#44aaff;">
                                            📄 Baixar PDF
                                        </a>
                                    </div>
                                </div>
                            <?php endif; ?>
                        </div>
                    </div>
                <?php endif; ?>

                <!-- Headers da Resposta -->
                <div class="card mt-2" style="background:#0d0d20;">
                    <div class="card-title" style="font-size:14px; color:#888;">
                        📋 Headers da Resposta
                        <button class="copy-btn" onclick="copiarTexto('headersResponse')">📋 Copiar</button>
                    </div>
                    <div class="result-box" id="headersResponse">
                        <pre><?php echo htmlspecialchars($resultado['headers']); ?></pre>
                    </div>
                </div>

                <!-- Corpo da Resposta -->
                <div class="card mt-2" style="background:#0d0d20;">
                    <div class="card-title" style="font-size:14px; color:#888;">
                        📄 Corpo da Resposta
                        <button class="copy-btn" onclick="copiarTexto('bodyResponse')">📋 Copiar</button>
                        <?php if ($jsonValido): ?>
                            <span class="badge" style="background:#00ff88;color:#0a0a1a;">JSON Válido</span>
                        <?php else: ?>
                            <span class="badge" style="background:#ff4466;color:white;">JSON Inválido</span>
                        <?php endif; ?>
                    </div>
                    <div class="result-box" id="bodyResponse" style="max-height:600px;">
                        <?php if ($jsonValido): ?>
                            <div class="json-viewer">
                                <?php echo formatarJSON($dados); ?>
                            </div>
                        <?php else: ?>
                            <pre><?php echo htmlspecialchars($resultado['body']); ?></pre>
                        <?php endif; ?>
                    </div>
                </div>

                <!-- Debug Info -->
                <div class="card mt-2" style="background:#0d0d20; border-color:#ffaa44;">
                    <div class="card-title" style="font-size:14px; color:#ffaa44;">
                        🐛 Debug Information
                    </div>
                    <div class="result-box">
                        <pre style="font-size:12px; color:#888;">
URL: <?php echo htmlspecialchars($resultado['url']); ?>

HTTP Code: <?php echo $resultado['http_code']; ?>

cURL Error: <?php echo $resultado['curl_error'] ?: 'Nenhum'; ?>

Content-Type: <?php 
$contentType = '';
foreach(explode("\n", $resultado['headers']) as $line) {
    if(stripos($line, 'Content-Type:') !== false) {
        $contentType = trim(substr($line, strpos($line, ':') + 1));
        break;
    }
}
echo htmlspecialchars($contentType ?: 'Não identificado');
?>

Resposta Tamanho: <?php echo strlen($resultado['body']); ?> bytes
                        </pre>
                    </div>
                </div>
            </div>
        <?php endif; ?>

        <!-- Footer -->
        <div class="card mt-3" style="background:#0d0d20; border-color:#2a2a4a;">
            <div class="text-center text-muted" style="font-size:13px;">
                <p>
                    <strong>🔧 Dicas para teste:</strong>
                </p>
                <ul style="list-style:none; padding:0; text-align:left; max-width:600px; margin:0 auto;">
                    <li>• Use o token de <strong>homologação</strong> da Focus</li>
                    <li>• A referência deve ser exatamente como foi gerada</li>
                    <li>• O status <strong>"autorizado"</strong> indica que a nota foi aprovada</li>
                    <li>• O PDF estará disponível apenas para notas autorizadas</li>
                </ul>
                <hr style="border-color:#2a2a4a; margin:10px 0;">
                <p style="font-size:12px;">
                    API Focus NFS-e v2 | Ambiente: Homologação
                </p>
            </div>
        </div>
    </div>

    <script>
        // Função para formatar JSON com cores
        function formatarJSON(obj, nivel = 0) {
            if (obj === null) return '<span class="null">null</span>';
            if (typeof obj === 'boolean') return '<span class="boolean">' + obj + '</span>';
            if (typeof obj === 'number') return '<span class="number">' + obj + '</span>';
            if (typeof obj === 'string') return '<span class="string">"' + obj + '"</span>';
            if (Array.isArray(obj)) {
                if (obj.length === 0) return '<span class="bracket">[]</span>';
                let html = '<span class="bracket">[</span>\n';
                obj.forEach((item, i) => {
                    html += '  '.repeat(nivel + 1) + formatarJSON(item, nivel + 1);
                    if (i < obj.length - 1) html += ',';
                    html += '\n';
                });
                html += '  '.repeat(nivel) + '<span class="bracket">]</span>';
                return html;
            }
            if (typeof obj === 'object') {
                const keys = Object.keys(obj);
                if (keys.length === 0) return '<span class="bracket">{}</span>';
                let html = '<span class="bracket">{</span>\n';
                keys.forEach((key, i) => {
                    html += '  '.repeat(nivel + 1) + '<span class="key">"' + key + '"</span>: ';
                    html += formatarJSON(obj[key], nivel + 1);
                    if (i < keys.length - 1) html += ',';
                    html += '\n';
                });
                html += '  '.repeat(nivel) + '<span class="bracket">}</span>';
                return html;
            }
            return String(obj);
        }

        // Função para copiar texto
        function copiarTexto(id) {
            const elemento = document.getElementById(id);
            const texto = elemento.textContent || elemento.innerText;
            navigator.clipboard.writeText(texto).then(() => {
                const btn = event.target;
                const originalText = btn.textContent;
                btn.textContent = '✅ Copiado!';
                setTimeout(() => {
                    btn.textContent = originalText;
                }, 2000);
            }).catch(err => {
                // Fallback: selecionar o texto
                const range = document.createRange();
                range.selectNode(elemento);
                window.getSelection().removeAllRanges();
                window.getSelection().addRange(range);
                document.execCommand('copy');
                const btn = event.target;
                const originalText = btn.textContent;
                btn.textContent = '✅ Copiado!';
                setTimeout(() => {
                    btn.textContent = originalText;
                }, 2000);
            });
        }

        // Função para limpar formulário
        function limparFormulario() {
            document.getElementById('ref').value = '';
            document.getElementById('token').value = '';
            document.querySelector('.result-box').innerHTML = '';
            // Recarregar a página para limpar resultados
            window.location.href = window.location.pathname;
        }

        // Função para carregar exemplo
        function carregarExemplo() {
            document.getElementById('ref').value = 'NF_20260619_150953_49321';
            document.getElementById('token').focus();
            mostrarMensagem('Exemplo carregado! Clique em "Buscar Nota" para testar.', 'info');
        }

        // Função para mostrar mensagem temporária
        function mostrarMensagem(mensagem, tipo) {
            const div = document.createElement('div');
            div.className = 'alert alert-' + tipo;
            div.textContent = mensagem;
            div.style.position = 'fixed';
            div.style.top = '20px';
            div.style.right = '20px';
            div.style.zIndex = '9999';
            div.style.maxWidth = '400px';
            document.body.appendChild(div);
            setTimeout(() => {
                div.remove();
            }, 5000);
        }

        // Mostrar loading ao enviar formulário
        document.getElementById('formConsulta').addEventListener('submit', function() {
            document.getElementById('loading').style.display = 'block';
            document.getElementById('btnBuscar').disabled = true;
            document.getElementById('btnBuscar').innerHTML = '<span>⏳</span> Buscando...';
        });

        // Esconder loading se houver resultado
        <?php if ($resultado): ?>
            document.getElementById('loading').style.display = 'none';
            document.getElementById('btnBuscar').disabled = false;
            document.getElementById('btnBuscar').innerHTML = '<span>🔍</span> Buscar Nota';
        <?php endif; ?>
    </script>

</body>
</html>

<?php
// =============================================
// FUNÇÃO AUXILIAR PARA FORMATAR JSON (fallback)
// =============================================
function formatarJSON($dados) {
    // Usa a formatação do JavaScript se possível
    return '<pre>' . htmlspecialchars(json_encode($dados, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE)) . '</pre>';
}
?>