<?php
// =====================================================================
// Depto de Engenharia e Automacao - Master Automacao - Autor: Derlivon Silva
// =====================================================================
// Diagnostico de empresa / multi-instancia (multi-porta).
// Acessar via http://servidor:PORTA/diag-empresa.php
// Saida em text/plain. SEM autenticacao - remover apos uso em producao.
// =====================================================================

declare(strict_types=1);

// Nao deixar erros corromperem a saida text/plain
ini_set('display_errors', '0');
ini_set('display_startup_errors', '0');
ini_set('log_errors', '1');

header('Content-Type: text/plain; charset=UTF-8');
header('Cache-Control: no-store, no-cache, must-revalidate, max-age=0');
header('Pragma: no-cache');

// Inicia sessao para podermos ler session_id() e session_save_path()
// (sem isso, session_id() retorna string vazia)
if (session_status() === PHP_SESSION_NONE) {
    @session_start();
}

// ---------------------------------------------------------------------
// Helpers
// ---------------------------------------------------------------------
function line(string $label, $value): string {
    if (is_bool($value)) {
        $value = $value ? 'true' : 'false';
    } elseif ($value === null) {
        $value = '(null)';
    } elseif (!is_scalar($value)) {
        $value = print_r($value, true);
    }
    return str_pad($label, 32, ' ', STR_PAD_RIGHT) . ': ' . $value . PHP_EOL;
}

function sep(string $title = ''): string {
    $bar = str_repeat('=', 70) . PHP_EOL;
    if ($title === '') {
        return $bar;
    }
    return PHP_EOL . $bar . '  ' . $title . PHP_EOL . $bar;
}

// ---------------------------------------------------------------------
// Cabecalho
// ---------------------------------------------------------------------
echo sep('DIAG-EMPRESA - Premium Express Gestão');
echo line('Timestamp', date('Y-m-d H:i:s'));
echo line('PHP_VERSION', PHP_VERSION);
echo line('PHP_SAPI', PHP_SAPI);
echo line('OS', PHP_OS);

// ---------------------------------------------------------------------
// 1) Servidor / Apache
// ---------------------------------------------------------------------
echo sep('SERVIDOR / APACHE');
echo line('DOCUMENT_ROOT', $_SERVER['DOCUMENT_ROOT'] ?? '(nao definido)');
echo line('SERVER_NAME',   $_SERVER['SERVER_NAME']   ?? '(nao definido)');
echo line('SERVER_ADDR',   $_SERVER['SERVER_ADDR']   ?? '(nao definido)');
echo line('SERVER_PORT',   $_SERVER['SERVER_PORT']   ?? '(nao definido)');
echo line('HTTP_HOST',     $_SERVER['HTTP_HOST']     ?? '(nao definido)');
echo line('REQUEST_URI',   $_SERVER['REQUEST_URI']   ?? '(nao definido)');
echo line('SCRIPT_FILENAME', $_SERVER['SCRIPT_FILENAME'] ?? '(nao definido)');
echo line('SERVER_SOFTWARE', $_SERVER['SERVER_SOFTWARE'] ?? '(nao definido)');

// ---------------------------------------------------------------------
// 2) Arquivo atual
// ---------------------------------------------------------------------
echo sep('ARQUIVO ATUAL (__FILE__)');
echo line('__FILE__', __FILE__);
echo line('__DIR__',  __DIR__);
echo line('realpath(__FILE__)', realpath(__FILE__) ?: '(falhou)');

// ---------------------------------------------------------------------
// 3) Localizacao do database.php
// ---------------------------------------------------------------------
echo sep('LOCALIZACAO DO database.php');

$candidatos = [
    __DIR__ . '/../config/database.php',
    __DIR__ . '/../app/config/database.php',
];

$dbPath = null;
foreach ($candidatos as $cand) {
    $real = realpath($cand);
    echo line('Candidato',          $cand);
    echo line('  realpath',         $real ?: '(NAO EXISTE)');
    echo line('  is_file',          $real && is_file($real));
    echo line('  is_readable',      $real && is_readable($real));
    if ($real && is_file($real) && $dbPath === null) {
        $dbPath = $real;
    }
    echo PHP_EOL;
}

echo line('database.php ESCOLHIDO', $dbPath ?: '(NENHUM encontrado)');

// ---------------------------------------------------------------------
// 4) Conteudo carregado do database.php
// ---------------------------------------------------------------------
echo sep('VALORES CARREGADOS DO database.php');

if ($dbPath === null) {
    echo "ERRO: nenhum database.php foi localizado nos caminhos candidatos." . PHP_EOL;
} else {
    try {
        // include retorna o array (database.php faz "return array(...);")
        /** @var array<string,mixed> $cfg */
        $cfg = include $dbPath;

        if (!is_array($cfg)) {
            echo "AVISO: database.php nao retornou um array. Tipo: " . gettype($cfg) . PHP_EOL;
        } else {
            // Campos que o usuario pediu explicitamente
            echo line('empresa',     $cfg['empresa']     ?? '(ausente)');
            echo line('host',        $cfg['host']        ?? '(ausente)');
            echo line('database',    $cfg['database']    ?? '(ausente)');
            // Extras uteis para diagnostico multi-instancia
            echo line('cod_empresa', $cfg['cod_empresa'] ?? '(ausente)');
            echo line('segmento',    $cfg['segmento']    ?? '(ausente)');
            echo line('tipo',        $cfg['tipo']        ?? '(ausente)');
            echo line('port (DB)',   $cfg['port']        ?? '(ausente)');
            echo line('username',    $cfg['username']    ?? '(ausente)');
            echo line('charset',     $cfg['charset']     ?? '(ausente)');
            // NAO exibir senha por padrao
            echo line('password',    isset($cfg['password']) ? '(definido, oculto)' : '(ausente)');
        }
    } catch (\Throwable $e) {
        echo "ERRO ao carregar database.php: " . $e->getMessage() . PHP_EOL;
    }
}

// ---------------------------------------------------------------------
// 5) firebird.conf
// ---------------------------------------------------------------------
echo sep('firebird.conf (php/firebird.conf)');

$fbConfCandidatos = [
    __DIR__ . '/../php/firebird.conf',
    dirname(__DIR__) . '/php/firebird.conf',
];

$fbConfPath = null;
foreach ($fbConfCandidatos as $cand) {
    $real = realpath($cand);
    echo line('Candidato',  $cand);
    echo line('  realpath', $real ?: '(NAO EXISTE)');
    if ($real && is_file($real) && $fbConfPath === null) {
        $fbConfPath = $real;
    }
}

echo PHP_EOL;
echo line('firebird.conf ESCOLHIDO', $fbConfPath ?: '(NENHUM)');

if ($fbConfPath !== null) {
    echo PHP_EOL . '----- INICIO firebird.conf -----' . PHP_EOL;
    $conteudo = @file_get_contents($fbConfPath);
    if ($conteudo === false) {
        echo '(falha ao ler arquivo)' . PHP_EOL;
    } else {
        echo $conteudo;
        if (!str_ends_with($conteudo, "\n")) {
            echo PHP_EOL;
        }
    }
    echo '----- FIM firebird.conf -----' . PHP_EOL;
}

// ---------------------------------------------------------------------
// 6) Sessao
// ---------------------------------------------------------------------
echo sep('SESSAO PHP');
echo line('session_status',     session_status());
echo line('session_name',       session_name());
echo line('session_id',         session_id() ?: '(vazio)');
echo line('session_save_path',  session_save_path() ?: '(default do sistema)');
echo line('session.cookie_path',    ini_get('session.cookie_path'));
echo line('session.cookie_domain',  ini_get('session.cookie_domain') ?: '(nao definido)');
echo line('session.cookie_secure',  ini_get('session.cookie_secure'));
echo line('session.cookie_httponly',ini_get('session.cookie_httponly'));
echo line('session.cookie_samesite',ini_get('session.cookie_samesite') ?: '(nao definido)');

// Cookies recebidos do cliente (so os nomes - sem valor pra nao vazar id)
$cookieNames = array_keys($_COOKIE);
echo line('Cookies recebidos',
    $cookieNames ? implode(', ', $cookieNames) : '(nenhum)'
);

// ---------------------------------------------------------------------
// 7) Resumo final
// ---------------------------------------------------------------------
echo sep('FIM DO DIAGNOSTICO');
echo "Compare a saida deste arquivo em portas diferentes (8100 / 8200 / ...)" . PHP_EOL;
echo "Se 'empresa' / 'database' / 'cod_empresa' forem IGUAIS nas duas portas," . PHP_EOL;
echo "o Apache esta apontando o mesmo DOCUMENT_ROOT para ambas - precisa" . PHP_EOL;
echo "duplicar a pasta da instancia ou ajustar VirtualHost." . PHP_EOL;
echo PHP_EOL;
echo "Se 'session_id' for IGUAL entre portas, o cookie de sessao esta" . PHP_EOL;
echo "cruzando entre instancias (mesmo host, portas diferentes compartilham" . PHP_EOL;
echo "cookie por padrao). Solucao: session_name diferente por instancia." . PHP_EOL;
