<?php
/**
 * Arquivo: /sitemap.php
 * Projeto: Juris Contratos
 * Data/Hora de atualização: 30/11/2025 17:40 (America/Sao_Paulo)
 *
 * Finalidade:
 * - Gerar sitemap XML automático para o domínio juriscontratos.com.br.
 * - Combinar:
 *      • Páginas fixas importantes (home, calculadora, loja, etc.) com prioridade própria;
 *      • Varredura automática das pastas públicas (.php e .html), exceto diretórios/arquivos ignorados.
 */

declare(strict_types=1);

date_default_timezone_set('America/Sao_Paulo');

@header('Content-Type: application/xml; charset=UTF-8');

// Domínio base (fixo para o ambiente de produção)
$baseUrl = 'https://www.juriscontratos.com.br';

// Raiz do site (Hostinger normalmente aponta corretamente aqui)
$rootPath = rtrim($_SERVER['DOCUMENT_ROOT'] ?? __DIR__, '/');

// Diretórios que NÃO devem entrar no sitemap
$ignoreDirs = [
    'admin',
    'includes',
    'motores',
    'reparadores',
    'tmp',
    'vendor',
    'logs',
    'private',
    'assets',
    'css',
    'js',
    'img',
    'images',
    'icons',
];

// Arquivos específicos que NÃO devem aparecer
$ignoreFiles = [
    'sitemap.php',
    'sitemap.xml',
    'robots.txt',
    'phpinfo.php',
];

// Páginas fixas com prioridade e changefreq personalizadas
// (serão incluídas APENAS se o arquivo correspondente existir)
$fixedPages = [
    '/' => [
        'priority'   => '1.0',
        'changefreq' => 'weekly',
    ],
    // Calculadora de Contrato – página pilar nova
    '/calculadora_contrato.php' => [
        'priority'   => '0.95',
        'changefreq' => 'weekly',
    ],
    '/gerador-contrato-compra-imovel.php' => [
        'priority'   => '0.90',
        'changefreq' => 'weekly',
    ],
    '/contrato-locacao-residencial.php' => [
        'priority'   => '0.90',
        'changefreq' => 'weekly',
    ],
    '/contrato-locacao-imovel.php' => [
        'priority'   => '0.85',
        'changefreq' => 'weekly',
    ],
    '/contrato-universal.php' => [
        'priority'   => '0.85',
        'changefreq' => 'weekly',
    ],
    // Loja pública de contratos (não confundir com telas internas de ADMIN)
    '/loja-contratos-prontos.php' => [
        'priority'   => '0.90',
        'changefreq' => 'weekly',
    ],
    '/contrato_compra_venda.php' => [
        'priority'   => '0.80',
        'changefreq' => 'monthly',
    ],
    '/contrato_imobiliario.php' => [
        'priority'   => '0.80',
        'changefreq' => 'monthly',
    ],
    '/contrato_locacao_comercial.php' => [
        'priority'   => '0.80',
        'changefreq' => 'monthly',
    ],
    '/contrato_prestacao_servicos.php' => [
        'priority'   => '0.80',
        'changefreq' => 'monthly',
    ],
    '/comprar-creditos.php' => [
        'priority'   => '0.60',
        'changefreq' => 'monthly',
    ],
    '/ia_chat.php' => [
        'priority'   => '0.70',
        'changefreq' => 'weekly',
    ],
    '/ajuda.php' => [
        'priority'   => '0.50',
        'changefreq' => 'monthly',
    ],
    '/sobre.php' => [
        'priority'   => '0.50',
        'changefreq' => 'yearly',
    ],
    '/cadastrar.php' => [
        'priority'   => '0.40',
        'changefreq' => 'monthly',
    ],
];

// Array final de URLs (chave = caminho, valor = metadados)
$urls = [];

/**
 * Adiciona uma URL ao array final, evitando duplicidade.
 *
 * @param array    $urls       Array de URLs (referência)
 * @param string   $path       Caminho relativo iniciado com "/"
 * @param string   $priority   Prioridade (0.0 a 1.0)
 * @param string   $changefreq Frequência de mudança (daily, weekly, monthly, etc.)
 * @param int|null $lastmodTs  Timestamp da última modificação (opcional)
 */
function adicionarUrl(array &$urls, string $path, string $priority, string $changefreq, ?int $lastmodTs = null): void
{
    $path = '/' . ltrim($path, '/');

    if (isset($urls[$path])) {
        // Já cadastrada (provavelmente como fixa), não sobrescreve
        return;
    }

    if ($lastmodTs === null) {
        $lastmod = date('Y-m-d');
    } else {
        $lastmod = date('Y-m-d', $lastmodTs);
    }

    $urls[$path] = [
        'priority'   => $priority,
        'changefreq' => $changefreq,
        'lastmod'    => $lastmod,
    ];
}

/**
 * Tenta descobrir o caminho físico do arquivo para uma URL "bonita".
 * Ex.: /contrato-locacao-residencial.php
 *   - tenta /contrato-locacao-residencial.php
 *   - se não achar, tenta /paginas/contrato-locacao-residencial.php
 */
function resolverCaminhoFisico(string $rootPath, string $path): ?string
{
    // Home ("/") normalmente é index.php na raiz
    if ($path === '/') {
        $candidate = $rootPath . '/index.php';
        return file_exists($candidate) ? $candidate : null;
    }

    // 1ª tentativa: arquivo direto na raiz
    $candidateRoot = $rootPath . $path;
    if (file_exists($candidateRoot)) {
        return $candidateRoot;
    }

    // 2ª tentativa: arquivo dentro de /paginas (padrão do seu site)
    $basename = ltrim($path, '/');
    $candidatePaginas = $rootPath . '/paginas/' . $basename;
    if (file_exists($candidatePaginas)) {
        return $candidatePaginas;
    }

    // Não encontrado
    return null;
}

/* ============================================================================
 * 1) Adiciona as PÁGINAS FIXAS primeiro (somente se o arquivo existir)
 * ========================================================================== */
foreach ($fixedPages as $path => $meta) {
    $fullPath = resolverCaminhoFisico($rootPath, $path);

    // Se o arquivo não existir em nenhum dos lugares, pula (evita URL morta)
    if ($fullPath === null) {
        continue;
    }

    $lastmodTs = @filemtime($fullPath) ?: null;

    adicionarUrl(
        $urls,
        $path,
        $meta['priority'],
        $meta['changefreq'],
        $lastmodTs
    );
}

/* ============================================================================
 * 2) Varre o servidor em busca de arquivos PHP/HTML automaticamente
 * ========================================================================== */
$directoryIterator = new \RecursiveDirectoryIterator(
    $rootPath,
    \FilesystemIterator::SKIP_DOTS
);
$iterator = new \RecursiveIteratorIterator($directoryIterator);

foreach ($iterator as $file) {
    /** @var \SplFileInfo $file */
    if (!$file->isFile()) {
        continue;
    }

    $ext = strtolower(pathinfo($file->getFilename(), PATHINFO_EXTENSION));
    if (!in_array($ext, ['php', 'html'], true)) {
        continue;
    }

    $realPath = $file->getRealPath();
    if ($realPath === false) {
        continue;
    }

    // Caminho relativo à raiz (ex: /paginas/exemplo.php)
    $relativePath = substr($realPath, strlen($rootPath));
    if ($relativePath === false || $relativePath === '') {
        continue;
    }

    $relativePath = str_replace('\\', '/', $relativePath); // Windows-safe
    if ($relativePath[0] !== '/') {
        $relativePath = '/' . $relativePath;
    }

    // Ignorar index.php da raiz (já representado como "/")
    if ($relativePath === '/index.php') {
        continue;
    }

    // Ignorar arquivos específicos
    if (in_array(basename($relativePath), $ignoreFiles, true)) {
        continue;
    }

    // Ignorar diretórios proibidos (primeiro nível do caminho)
    $parts    = explode('/', trim($relativePath, '/'));
    $firstDir = $parts[0] ?? '';
    if (in_array($firstDir, $ignoreDirs, true)) {
        continue;
    }

    // Prioridade padrão para páginas novas/encontradas automaticamente
    $priority   = '0.70';
    $changefreq = 'weekly';
    $lastmodTs  = $file->getMTime() ?: null;

    adicionarUrl($urls, $relativePath, $priority, $changefreq, $lastmodTs);
}

/* ============================================================================
 * (Opcional) Ordenar URLs por caminho para ficar mais organizado
 * ========================================================================== */
ksort($urls);

/* ============================================================================
 * 3) Imprime o XML final
 * ========================================================================== */
echo "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n";
echo "<urlset xmlns=\"http://www.sitemaps.org/schemas/sitemap/0.9\">\n\n";

foreach ($urls as $path => $meta) {
    $loc = htmlspecialchars($baseUrl . ($path === '/' ? '/' : $path), ENT_XML1 | ENT_QUOTES, 'UTF-8');

    echo "  <url>\n";
    echo "    <loc>{$loc}</loc>\n";
    echo "    <lastmod>{$meta['lastmod']}</lastmod>\n";
    echo "    <changefreq>{$meta['changefreq']}</changefreq>\n";
    echo "    <priority>{$meta['priority']}</priority>\n";
    echo "  </url>\n\n";
}

echo "</urlset>";
