<?php
require_once __DIR__ . '/config/config.php';
require_once __DIR__ . '/includes/tema_publico.php';
// A página deve carregar mesmo sem `?embed`.
// O parâmetro `embed` só altera o comportamento de alguns links/targets quando a página é embutida (iframe).

if (defined('SITE_MODE') && (SITE_MODE === 'imobiliaria' || SITE_MODE === 'provedor')) {
    $pdo = getPdo();
    $slider = [];
    try {
        $slider = $pdo->query('SELECT * FROM slider WHERE ativo = 1 ORDER BY ordem ASC, id ASC')->fetchAll();
    } catch (Throwable $e) {
        $slider = [];
    }
    $pageTitle = 'Início';
    $portalHeader = false;
    $canonicalUrl = urlPublic();
    $metaDescription = trim(config('meta_description') ?? '') ?: (SITE_NAME . ' — ' . (defined('SITE_TAGLINE') ? SITE_TAGLINE : ''));
    $temaPublico = netsTemaPublicoAtivo();
    require __DIR__ . '/includes/header.php';
    if ($temaPublico === 'lume') {
        require __DIR__ . '/views/home-imobiliaria-tema1.php';
    } elseif ($temaPublico === 'solis') {
        require __DIR__ . '/views/home-imobiliaria-solis.php';
    } else {
        require __DIR__ . '/views/home-imobiliaria.php';
    }
    require __DIR__ . '/includes/footer.php';
    exit;
}

$pdo = getPdo();

$cidadesJoin = '';
$cidadesSelect = '';
try {
    $pdo->query('SELECT 1 FROM cidades LIMIT 1');
    $cidadesJoin = ' LEFT JOIN cidades cd ON n.cidade_id = cd.id';
    $cidadesSelect = ', cd.nome AS cidade_nome';
} catch (Throwable $e) { }

// Slider
$stmt = $pdo->query('SELECT * FROM slider WHERE ativo = 1 ORDER BY ordem ASC, id ASC');
$slider = $stmt->fetchAll();

// Notícias importadas - primeira dobra (topo). Se não houver importadas ainda, usa manuais.
try {
    $stmt = $pdo->prepare('
        SELECT n.*, c.nome as categoria_nome, c.slug as categoria_slug, c.cor as categoria_cor' . $cidadesSelect . '
        FROM noticias n
        LEFT JOIN categorias c ON n.categoria_id = c.id' . $cidadesJoin . '
        WHERE n.ativo = 1 AND n.importada = 1
        ORDER BY n.criado_em DESC
        LIMIT 10
    ');
    $stmt->execute();
    $noticias = $stmt->fetchAll();
} catch (Throwable $e) {
    // Fallback para bancos antigos (sem c.cor/c.slug)
    $stmt = $pdo->prepare('SELECT n.*, c.nome as categoria_nome FROM noticias n LEFT JOIN categorias c ON n.categoria_id = c.id WHERE n.ativo = 1 AND n.importada = 1 ORDER BY n.criado_em DESC LIMIT 10');
    $stmt->execute();
    $noticias = $stmt->fetchAll();
}

// Notícias manuais abaixo do vídeo (até 5)
try {
    $stmt = $pdo->prepare('
        SELECT n.*, c.nome as categoria_nome, c.slug as categoria_slug, c.cor as categoria_cor' . $cidadesSelect . '
        FROM noticias n
        LEFT JOIN categorias c ON n.categoria_id = c.id' . $cidadesJoin . '
        WHERE n.ativo = 1 AND (n.importada = 0 OR n.importada IS NULL)
        ORDER BY n.criado_em DESC
        LIMIT 5
    ');
    $stmt->execute();
    $noticiasAbaixoVideo = $stmt->fetchAll();
} catch (Throwable $e) {
    $stmt = $pdo->prepare('SELECT n.*, c.nome as categoria_nome FROM noticias n LEFT JOIN categorias c ON n.categoria_id = c.id WHERE n.ativo = 1 AND (n.importada = 0 OR n.importada IS NULL) ORDER BY n.criado_em DESC LIMIT 5');
    $stmt->execute();
    $noticiasAbaixoVideo = $stmt->fetchAll();
}

// Fallback: enquanto não houver notícias importadas, usar as manuais também na primeira dobra
if (empty($noticias)) {
    $noticias = $noticiasAbaixoVideo;
}

// Primeira coluna da home-portal (seleção manual via admin)
$primeiraColuna = [];
try {
    $primeiraColuna = $pdo->query("
        SELECT n.*, c.nome as categoria_nome, c.slug as categoria_slug, c.cor as categoria_cor" . $cidadesSelect . "
        FROM noticias n
        LEFT JOIN categorias c ON n.categoria_id = c.id" . $cidadesJoin . "
        WHERE n.ativo = 1 AND n.home_primeira_coluna = 1
        ORDER BY n.criado_em DESC
        LIMIT 2
    ")->fetchAll();
} catch (Throwable $e) { $primeiraColuna = []; }

// Slider Destaque (seleção manual via admin: destaque=1)
$sliderDestaques = [];
try {
    $sliderDestaques = $pdo->query("
        SELECT n.*, c.nome as categoria_nome, c.slug as categoria_slug, c.cor as categoria_cor" . $cidadesSelect . "
        FROM noticias n
        LEFT JOIN categorias c ON n.categoria_id = c.id" . $cidadesJoin . "
        WHERE n.ativo = 1 AND n.destaque = 1
        ORDER BY n.criado_em DESC
        LIMIT 4
    ")->fetchAll();
} catch (Throwable $e) { $sliderDestaques = []; }

// 3ª coluna (lista só de títulos)
$terceiraColuna = [];
try {
    $terceiraColuna = $pdo->query("
        SELECT n.*, c.nome as categoria_nome, c.slug as categoria_slug, c.cor as categoria_cor" . $cidadesSelect . "
        FROM noticias n
        LEFT JOIN categorias c ON n.categoria_id = c.id" . $cidadesJoin . "
        WHERE n.ativo = 1 AND n.home_terceira_coluna = 1
        ORDER BY n.criado_em DESC
        LIMIT 2
    ")->fetchAll();
} catch (Throwable $e) { $terceiraColuna = []; }

// Publicidade abaixo do mural
$publicidadeMural = [];
try {
    $stmt = $pdo->query('SELECT * FROM publicidade_mural WHERE ativo = 1 ORDER BY ordem ASC, id ASC');
    $publicidadeMural = $stmt ? $stmt->fetchAll() : [];
} catch (Exception $e) { /* tabela pode não existir ainda */ }

// Galeria de fotos (última galeria ativa para preview na home)
$galeriaHome = null;
$galeriaFotos = [];
try {
    $galeriaHome = $pdo->query('SELECT * FROM galerias WHERE ativo = 1 ORDER BY id DESC LIMIT 1')->fetch();
    if ($galeriaHome) {
        $stmt = $pdo->prepare('SELECT * FROM galeria_fotos WHERE galeria_id = ? ORDER BY ordem ASC, id ASC LIMIT 20');
        $stmt->execute([$galeriaHome['id']]);
        $galeriaFotos = $stmt->fetchAll();
    }
} catch (Exception $e) { }

// Banners home (posições distintas)
$bannersPos1 = $pdo->query("SELECT * FROM banners WHERE ativo = 1 AND (posicao = 'home_pos1' OR posicao = 'home') ORDER BY ordem ASC")->fetchAll();
$bannersPos2 = $pdo->query("SELECT * FROM banners WHERE ativo = 1 AND posicao = 'home_pos2' ORDER BY ordem ASC")->fetchAll();
$bannersPos3 = $pdo->query("SELECT * FROM banners WHERE ativo = 1 AND posicao = 'home_pos3' ORDER BY ordem ASC")->fetchAll();

// Mais lidas (por visualizacoes)
$maisLidas = [];
try {
    $maisLidas = $pdo->query("SELECT id, titulo, slug, imagem, criado_em, visualizacoes FROM noticias WHERE ativo = 1 ORDER BY visualizacoes DESC, criado_em DESC LIMIT 6")->fetchAll();
} catch (Throwable $e) { $maisLidas = []; }

// Vídeo destaque
$stmt = $pdo->query('SELECT * FROM videos WHERE ativo = 1 AND destaque = 1 ORDER BY criado_em DESC LIMIT 1');
$videoDestaque = $stmt->fetch();

// Sessão de vídeos (home-portal)
$homeVideosEnabled = (string)(config('home_videos_enabled') ?? '1');
$homeVideosEnabled = ($homeVideosEnabled === '0') ? 0 : 1;
$homeVideosBg = trim((string)(config('home_videos_bg') ?? '#000000'));
if ($homeVideosBg === '') $homeVideosBg = '#000000';

// CTA: seguir canal do YouTube (admin)
$homeVideosYoutubeEnabled = (string)(config('home_videos_youtube_enabled') ?? '1');
$homeVideosYoutubeEnabled = ($homeVideosYoutubeEnabled === '0') ? 0 : 1;
$homeVideosYoutubeUrl = trim((string)(config('home_videos_youtube_url') ?? ''));
$homeVideosYoutubeText = trim((string)(config('home_videos_youtube_text') ?? 'Siga o canal no YouTube'));
$homeVideosYoutubeText = $homeVideosYoutubeText !== '' ? $homeVideosYoutubeText : 'Siga o canal no YouTube';
$homeVideosYoutubeUrl = $homeVideosYoutubeUrl !== '' ? $homeVideosYoutubeUrl : '';
if ($homeVideosYoutubeUrl === '') {
    $homeVideosYoutubeEnabled = 0;
}
$homeVideosList = [];
if (!function_exists('portalExtractEmbedSrc')) {
    function portalExtractEmbedSrc(string $raw): string
    {
        $raw = trim($raw);
        if ($raw === '') return '';
        if (preg_match('/src=["\\\']([^"\\\']+)["\\\']/i', $raw, $m)) {
            return trim((string)$m[1]);
        }
        if (filter_var($raw, FILTER_VALIDATE_URL)) return $raw;
        return '';
    }
}
if (!function_exists('portalVideoCardData')) {
    function portalVideoCardData(array $video): array
    {
        $src = portalExtractEmbedSrc((string)($video['url'] ?? ''));
        $provider = 'generic';
        $videoId = '';
        $thumb = '';

        if ($src !== '') {
            if (preg_match('~(?:youtube\\.com/(?:embed/|watch\\?v=)|youtu\\.be/)([A-Za-z0-9_-]{6,})~i', $src, $m)) {
                $provider = 'youtube';
                $videoId = (string)$m[1];
                $thumb = 'https://i.ytimg.com/vi/' . rawurlencode($videoId) . '/hqdefault.jpg';
                $src .= (strpos($src, '?') !== false ? '&' : '?') . 'rel=0&modestbranding=1&playsinline=1';
            } elseif (preg_match('~vimeo\\.com/(?:video/)?([0-9]+)~i', $src, $m)) {
                $provider = 'vimeo';
                $videoId = (string)$m[1];
                $thumb = 'https://vumbnail.com/' . rawurlencode($videoId) . '.jpg';
            }
        }

        return [
            'id' => (int)($video['id'] ?? 0),
            'titulo' => (string)($video['titulo'] ?? ''),
            'descricao' => (string)($video['descricao'] ?? ''),
            'embed_src' => $src,
            'thumb' => $thumb,
            'provider' => $provider,
        ];
    }
}

try {
    $homeVideosList = $pdo->query('SELECT * FROM videos WHERE ativo = 1 ORDER BY destaque DESC, criado_em DESC LIMIT 4')->fetchAll();
} catch (Throwable $e) { $homeVideosList = []; }
$homeVideosCards = array_values(array_filter(array_map('portalVideoCardData', $homeVideosList), function ($v) {
    return !empty($v['embed_src']);
}));

// Top 10
$stmt = $pdo->query('SELECT * FROM top10 WHERE ativo = 1 ORDER BY posicao ASC LIMIT 10');
$top10 = $stmt->fetchAll();

// Eventos
$stmt = $pdo->query('SELECT * FROM eventos WHERE ativo = 1 AND data_evento >= CURDATE() ORDER BY data_evento ASC LIMIT 5');
$eventos = $stmt->fetchAll();

// Enquete ativa
$stmt = $pdo->query('SELECT * FROM enquetes WHERE ativo = 1 ORDER BY criado_em DESC LIMIT 1');
$enquete = $stmt->fetch();
$opcoesEnquete = [];
if ($enquete) {
    $stmt = $pdo->prepare('SELECT * FROM enquete_opcoes WHERE enquete_id = ? ORDER BY id');
    $stmt->execute([$enquete['id']]);
    $opcoesEnquete = $stmt->fetchAll();
}

// Ordem e blocos da página inicial (Admin → Layout da home)
$homeLayoutItens = HomeLayout::loadForFront($pdo);
$homeLayoutCategoriaNoticias = [];
$homeLayoutCategoriaMeta = [];
foreach ($homeLayoutItens as $b) {
    if (($b['tipo'] ?? '') === 'categoria_grade' && !empty($b['categoria_id'])) {
        $blockId = (int)($b['id'] ?? 0);
        $cid = (int)$b['categoria_id'];
        if ($blockId < 1) {
            continue;
        }
        $lim = HomeLayout::normalizarLimiteNoticias($b['limite_noticias'] ?? null);
        try {
            $stmt = $pdo->prepare(
                'SELECT n.*, c.nome AS categoria_nome, c.slug AS categoria_slug, c.cor AS categoria_cor' . $cidadesSelect . ' FROM noticias n LEFT JOIN categorias c ON n.categoria_id = c.id' . $cidadesJoin . ' WHERE n.ativo = 1 AND n.categoria_id = ? ORDER BY n.criado_em DESC LIMIT ' . (int)$lim
            );
            $stmt->execute([$cid]);
            $homeLayoutCategoriaNoticias[$blockId] = $stmt->fetchAll(PDO::FETCH_ASSOC);
            $st2 = $pdo->prepare('SELECT id, nome, slug FROM categorias WHERE id = ?');
            $st2->execute([$cid]);
            $homeLayoutCategoriaMeta[$blockId] = $st2->fetch(PDO::FETCH_ASSOC) ?: [];
        } catch (Throwable $e) {
            $homeLayoutCategoriaNoticias[$blockId] = [];
            $homeLayoutCategoriaMeta[$blockId] = [];
        }
    }
}

$rndPage = max(1, (int)($_GET['rndp'] ?? 1));
$rndPerPage = 9;
$rndOffset = ($rndPage - 1) * $rndPerPage;
$rndTotal = 0;
$rndItems = [];
try {
    $rndTotal = (int)($pdo->query('SELECT COUNT(*) FROM noticias WHERE ativo = 1 AND home_noticias_destaque = 1')->fetchColumn() ?: 0);
    $stmt = $pdo->prepare('
        SELECT n.*, c.nome AS categoria_nome, c.cor AS categoria_cor' . $cidadesSelect . '
        FROM noticias n
        LEFT JOIN categorias c ON n.categoria_id = c.id' . $cidadesJoin . '
        WHERE n.ativo = 1 AND n.home_noticias_destaque = 1
        ORDER BY RAND()
        LIMIT ' . (int)$rndPerPage . ' OFFSET ' . (int)$rndOffset . '
    ');
    $stmt->execute();
    $rndItems = $stmt->fetchAll();
} catch (Throwable $e) {
    $rndItems = array_slice($noticias ?? [], 0, 6);
    $rndTotal = count($rndItems);
}
$rndPages = max(1, (int)ceil($rndTotal / $rndPerPage));

$pageTitle = 'Home';
$portalHeader = true;
$canonicalUrl = urlPublic();

// Esteira "Últimas notícias": só notícias marcadas no cadastro (fallback na view se vazio)
$noticiasEsteira = [];
try {
    $stmt = $pdo->query('
        SELECT n.*, c.nome AS categoria_nome, c.slug AS categoria_slug, c.cor AS categoria_cor' . $cidadesSelect . '
        FROM noticias n
        LEFT JOIN categorias c ON n.categoria_id = c.id' . $cidadesJoin . '
        WHERE n.ativo = 1 AND n.home_esteira = 1
        ORDER BY n.criado_em DESC
        LIMIT 20
    ');
    $noticiasEsteira = $stmt ? $stmt->fetchAll(PDO::FETCH_ASSOC) : [];
} catch (Throwable $e) {
    $noticiasEsteira = [];
}

require __DIR__ . '/includes/header.php';
?>
<div class="portal-home-layout">
<?php
require __DIR__ . '/views/home-portal.php';
?>
</div>
<?php
require __DIR__ . '/includes/footer.php';
