<?php
if (!defined('ABSPATH')) exit;

/**
 * Extrai o ID de um URL do YouTube.
 */
function imz_get_youtube_id_from_url($url) {
    // Suporta formatos: youtube.com/watch?v=ID, youtube.com/embed/ID, youtube.com/v/ID, youtu.be/ID
    preg_match('/(youtube\.com\/(watch\?v=|embed\/|v\/)|youtu\.be\/)([a-zA-Z0-9_-]{11})/', $url, $matches);
    return $matches[3] ?? null;
}

/**
 * Busca os dados do vídeo do YouTube e armazena em cache.
 * Busca o Título, a Imagem de Capa (Thumbnail) e as Visualizações.
 */
function imz_get_youtube_video_data($post_id) {
    // 1. Tenta obter o URL principal (Vídeo Oficial)
    $youtube_url = get_post_meta($post_id, '_imz_youtube_url', true);

    // 2. CORREÇÃO: Se o URL principal estiver vazio, tenta o URL do Áudio
    if (empty($youtube_url)) {
        $youtube_url = get_post_meta($post_id, '_imz_audio_player_url', true);
    }

    if (empty($youtube_url)) {
        return null; // Se ambos estiverem vazios, não há nada a fazer
    }

    $video_id = imz_get_youtube_id_from_url($youtube_url);
    if (!$video_id) {
        return null;
    }

    $api_key = get_option('imz_youtube_api_key');
    if (empty($api_key)) {
        return ['error' => 'API Key do YouTube não configurada'];
    }

    // Lógica de cache: busca novamente apenas a cada 4 horas para não gastar quota da API
    $cache_key = '_youtube_data_cache_' . $video_id;
    $cached_data = get_transient($cache_key);
    if ($cached_data) {
        return $cached_data;
    }

    // Pedimos 'snippet' (para título/capa) e 'statistics' (para views)
    $api_url = "https://www.googleapis.com/youtube/v3/videos?part=snippet,statistics&id={$video_id}&key={$api_key}";
    $response = wp_remote_get($api_url);

    if (is_wp_error($response) || wp_remote_retrieve_response_code($response) !== 200) {
        // Em caso de erro, retorna o cache antigo se existir, para não quebrar o layout
        return get_transient($cache_key) ?: ['error' => 'Falha na comunicação com a API'];
    }

    $body = json_decode(wp_remote_retrieve_body($response), true);
    
    if (empty($body['items'])) {
        return ['error' => 'Vídeo não encontrado'];
    }

    $video_data = [
        'viewCount' => $body['items'][0]['statistics']['viewCount'] ?? 0,
        'title' => $body['items'][0]['snippet']['title'] ?? '',
        'thumbnailUrl' => $body['items'][0]['snippet']['thumbnails']['medium']['url'] ?? ''
    ];

    // Atualiza o cache por 4 horas
    set_transient($cache_key, $video_data, 4 * HOUR_IN_SECONDS);

    return $video_data;
}

/**
 * Formata números grandes de forma amigável (ex: 1500 -> 1.5K, 1000000 -> 1M).
 */
function imz_format_number_short($n) {
    if ($n < 1000) {
        return number_format($n, 0, '.', '.');
    }
    if ($n < 1000000) {
        return round($n / 1000, 1) . 'K';
    }
    return round($n / 1000000, 1) . 'M';
}

/**
 * Obtém os dados finais para o Player, aplicando as prioridades:
 * Título: Personalizado > YouTube
 * Artista: Personalizado > YouTube Split > Autor do Post
 * Imagem: Post Thumbnail > YouTube
 */
function imz_get_player_display_data($post_id) {
    // 1. Busca os dados base do YouTube (Cache)
    $yt_data = imz_get_youtube_video_data($post_id);

    // Se a API falhar ou não houver vídeo, cria uma estrutura básica
    if (!$yt_data || isset($yt_data['error'])) {
        $yt_data = [
            'viewCount' => 0, 
            'title' => get_the_title($post_id), // Fallback: Título do Post
            'thumbnailUrl' => '',
            'error' => $yt_data['error'] ?? 'Erro desconhecido'
        ];
    }

    // Estrutura base de retorno com valores padrão
    $display_data = [
        'title' => $yt_data['title'],
        'thumbnailUrl' => $yt_data['thumbnailUrl'],
        'viewCount' => $yt_data['viewCount'],
        // Define o artista padrão como o nome do autor do post no WordPress
        'artist' => get_the_author_meta('display_name', get_post_field('post_author', $post_id))
    ];

    // 2. Prioridade de TÍTULO (Personalizado > YouTube)
    $custom_title = get_post_meta($post_id, '_imz_custom_audio_title', true);
    if (!empty($custom_title)) {
        $display_data['title'] = $custom_title;
    }

    // 3. Prioridade de ARTISTA (Personalizado > YouTube Split > Autor do Post)
    $custom_artist = get_post_meta($post_id, '_imz_custom_audio_artist', true);
    if (!empty($custom_artist)) {
        // Se o utilizador definiu um artista manualmente, usa-o.
        $display_data['artist'] = $custom_artist;
    } 
    elseif (empty($custom_title) && strpos($display_data['title'], ' - ') !== false) {
         // Se NÃO há artista personalizado E NÃO há título personalizado:
         // Tenta separar "Artista - Música" do título original do YouTube
         $parts = explode(' - ', $display_data['title'], 2);
         if (count($parts) === 2) {
             $display_data['artist'] = trim($parts[0]);
             $display_data['title'] = trim($parts[1]);
         }
    }

    // 4. Prioridade de IMAGEM (Foto do Post > YouTube)
    if (has_post_thumbnail($post_id)) {
        // Pega a imagem de destaque do post (tamanho 'large' ou 'medium')
        $post_thumb = get_the_post_thumbnail_url($post_id, 'large');
        if ($post_thumb) {
            $display_data['thumbnailUrl'] = $post_thumb;
        }
    }

    return $display_data;
}
?>