<?php
/**
 * Helpers compartilhados do módulo Dicas.
 * Usado tanto pelo admin (validação ao salvar) quanto pelo Prospect (render).
 */

if (!function_exists('dicas_extract_youtube_id')) {
/**
 * Extrai o video ID do YouTube de uma URL.
 * Aceita os formatos:
 *  - https://www.youtube.com/watch?v=VIDEO_ID
 *  - https://youtu.be/VIDEO_ID
 *  - https://www.youtube.com/embed/VIDEO_ID
 *  - https://www.youtube.com/shorts/VIDEO_ID
 *  - https://www.youtube.com/v/VIDEO_ID
 *
 * @return string|null O ID (11 chars) ou null se não conseguir extrair
 */
function dicas_extract_youtube_id(string $url): ?string {
    $url = trim($url);
    if ($url === '') return null;

    // Padrões aceitos (em ordem de preferência)
    $patterns = [
        '#youtube\.com/watch\?v=([a-zA-Z0-9_-]{11})#',
        '#youtu\.be/([a-zA-Z0-9_-]{11})#',
        '#youtube\.com/embed/([a-zA-Z0-9_-]{11})#',
        '#youtube\.com/shorts/([a-zA-Z0-9_-]{11})#',
        '#youtube\.com/v/([a-zA-Z0-9_-]{11})#',
    ];
    foreach ($patterns as $rx) {
        if (preg_match($rx, $url, $m)) {
            return $m[1];
        }
    }
    return null;
}
}

if (!function_exists('dicas_youtube_embed_url')) {
/**
 * Gera a URL de embed do YouTube a partir do video ID.
 */
function dicas_youtube_embed_url(string $videoId): string {
    return 'https://www.youtube.com/embed/' . $videoId;
}
}

if (!function_exists('dicas_youtube_thumb_url')) {
/**
 * Gera a URL da thumbnail do YouTube.
 * 'hqdefault' = 480x360 (boa qualidade, sempre disponível).
 * Outras opções: 'maxresdefault' (HD, pode não existir), 'mqdefault' (320x180), 'sddefault' (640x480).
 */
function dicas_youtube_thumb_url(string $videoId, string $size = 'hqdefault'): string {
    return 'https://img.youtube.com/vi/' . $videoId . '/' . $size . '.jpg';
}
}

if (!function_exists('dicas_format_date_pt')) {
/**
 * Formata uma data no estilo "24 Nov 2025" em PT-BR.
 * Aceita string (qualquer formato parsable) ou timestamp.
 */
function dicas_format_date_pt($input): string {
    if ($input === null || $input === '') return '';
    $ts = is_numeric($input) ? (int)$input : strtotime((string)$input);
    if ($ts === false) return '';
    $meses = ['Jan','Fev','Mar','Abr','Mai','Jun','Jul','Ago','Set','Out','Nov','Dez'];
    $dia = (int)date('j', $ts);
    $mes = $meses[(int)date('n', $ts) - 1];
    $ano = (int)date('Y', $ts);
    return sprintf('%02d %s %d', $dia, $mes, $ano);
}
}

if (!function_exists('dicas_resolve_date')) {
/**
 * Resolve a data de exibição de uma dica conforme date_mode.
 *
 * @param string $dateMode 'auto' ou 'custom'
 * @param mixed  $customDate Valor da coluna custom_date (string ou null)
 * @param mixed  $createdAt  Valor da coluna created_at
 */
function dicas_resolve_date(string $dateMode, $customDate, $createdAt): string {
    if ($dateMode === 'custom' && !empty($customDate)) {
        return dicas_format_date_pt($customDate);
    }
    return dicas_format_date_pt($createdAt);
}
}
