<?php
/**
 * Gerador de Token para API Push
 * 
 * Execute UMA VEZ via CLI para gerar o token de uma integração.
 * O token será exibido no terminal — copie e guarde com segurança.
 * O hash bcrypt será salvo em back.integracao.api_token_hash.
 * 
 * IMPORTANTE: Após gerar o token, DELETE este arquivo do servidor
 * ou mova para fora da pasta public/.
 * 
 * Uso: php gerar_token_api.php <cdintegracao>
 * Exemplo: php gerar_token_api.php 1
 */

declare(strict_types=1);

if (PHP_SAPI !== 'cli') {
    http_response_code(403);
    echo "Este script é apenas para CLI.\n";
    exit(1);
}

$cdintegracao = (int)($argv[1] ?? 0);
if ($cdintegracao <= 0) {
    echo "\n";
    echo "Uso: php gerar_token_api.php <cdintegracao>\n";
    echo "Exemplo: php gerar_token_api.php 1\n\n";
    exit(1);
}

require_once dirname(__DIR__) . '/app/config/db.php';

// Verificar se a integração existe
$stmt = $pdo->prepare("SELECT cdintegracao, dsintegracao, flativo FROM back.integracao WHERE cdintegracao = :id");
$stmt->execute([':id' => $cdintegracao]);
$integ = $stmt->fetch(PDO::FETCH_ASSOC);

if (!$integ) {
    echo "\nERRO: Integração #{$cdintegracao} não encontrada no banco.\n\n";
    exit(1);
}

echo "\n";
echo "==========================================================\n";
echo "  Gerador de Token API Push - Helm Orçamento\n";
echo "==========================================================\n";
echo "  Integração: #{$integ['cdintegracao']} - {$integ['dsintegracao']}\n";
echo "  Status:     " . ($integ['flativo'] ? 'Ativa' : 'INATIVA') . "\n";
echo "==========================================================\n\n";

if (!$integ['flativo']) {
    echo "AVISO: Esta integração está INATIVA. O token será gerado,\n";
    echo "       mas a API rejeitará requests até que seja ativada.\n\n";
}

// Verificar se já tem token
$stmtCheck = $pdo->prepare("SELECT api_token_hash FROM back.integracao WHERE cdintegracao = :id");
$stmtCheck->execute([':id' => $cdintegracao]);
$hashExistente = $stmtCheck->fetchColumn();

if ($hashExistente) {
    echo "ATENÇÃO: Esta integração já possui um token configurado.\n";
    echo "Gerar um novo token INVALIDARÁ o anterior.\n\n";
    echo "Deseja continuar? (s/n): ";
    $resposta = strtolower(trim(fgets(STDIN)));
    if ($resposta !== 's' && $resposta !== 'sim') {
        echo "Operação cancelada.\n\n";
        exit(0);
    }
    echo "\n";
}

// Gerar token aleatório seguro (64 caracteres hex = 256 bits de entropia)
$token = bin2hex(random_bytes(32));
$hash  = password_hash($token, PASSWORD_BCRYPT);

// Salvar hash no banco
$stmtUpdate = $pdo->prepare("UPDATE back.integracao SET api_token_hash = :hash WHERE cdintegracao = :id");
$stmtUpdate->execute([':hash' => $hash, ':id' => $cdintegracao]);

echo "TOKEN GERADO COM SUCESSO!\n\n";
echo "----------------------------------------------------------\n";
echo "  TOKEN (copie e guarde — não será exibido novamente):\n\n";
echo "  {$token}\n\n";
echo "----------------------------------------------------------\n";
echo "  Hash bcrypt salvo no banco: OK\n";
echo "  Integração: #{$cdintegracao}\n";
echo "----------------------------------------------------------\n\n";
echo "PRÓXIMOS PASSOS:\n";
echo "  1. Copie o token acima\n";
echo "  2. Cole no campo 'api_token' do push_realizado.php\n";
echo "  3. DELETE este arquivo (gerar_token_api.php) do servidor\n\n";
