<?php
// functions.php — wp-content/themes/cancao-verdadeira/functions.php
// Gerado em: 25/05/2026 — Canção Verdadeira v1.0
//
// Bootstrap do tema filho. Enfileira estilos e scripts do tema.
// Herda estilos do Astra pai e carrega main.css + main.js do tema filho.
// Registra menus: menu principal, menu rodapé, menu usuário.
// Adiciona body_class cv-dark-theme para escopo CSS global.
// Integração com plugin cancao-verdadeira via funções cv_* já existentes.
// Adiciona suporte a thumbnails, title-tag, html5 para tema filho.
// NÃO registra CPT, metaboxes ou lógica AJAX — responsabilidade do plugin.

if ( ! defined( 'ABSPATH' ) ) exit;

/* =============================================================
   1. SETUP DO TEMA
   ============================================================= */
function cv_theme_setup() {
    // Suporte a recursos do WordPress
    add_theme_support( 'title-tag' );
    add_theme_support( 'post-thumbnails' );
    add_theme_support( 'html5', [
        'search-form', 'comment-form', 'comment-list', 'gallery', 'caption', 'script', 'style',
    ] );
    add_theme_support( 'customize-selective-refresh-widgets' );
    add_theme_support( 'wp-block-styles' );
    add_theme_support( 'align-wide' );

    // Registra menus de navegação
    register_nav_menus( [
        'cv-menu-principal' => __( 'Menu Principal', 'cancao-verdadeira' ),
        'cv-menu-rodape'    => __( 'Menu Rodapé',    'cancao-verdadeira' ),
        'cv-menu-usuario'   => __( 'Menu Usuário',   'cancao-verdadeira' ),
    ] );
}
add_action( 'after_setup_theme', 'cv_theme_setup' );

/* =============================================================
   2. ENQUEUE — ESTILOS
   ============================================================= */
function cv_enqueue_assets() {
    $ver = wp_get_theme()->get( 'Version' );

    // Google Fonts: Oswald (títulos), Lato (interface), EB Garamond (letras)
    wp_enqueue_style(
        'cv-google-fonts',
        'https://fonts.googleapis.com/css2?family=Oswald:wght@400;600;700&family=Lato:wght@300;400;700&family=EB+Garamond:ital,wght@0,400;0,600;1,400&display=swap',
        [],
        null
    );

    // Herda estilo do Astra pai
    wp_enqueue_style(
        'astra-theme-css',
        get_template_directory_uri() . '/style.css',
        [],
        $ver
    );

    // CSS principal do tema filho — TODO o visual está aqui
    wp_enqueue_style(
        'cv-main-css',
        get_stylesheet_directory_uri() . '/assets/css/main.css',
        [ 'astra-theme-css' ],
        $ver
    );
}
add_action( 'wp_enqueue_scripts', 'cv_enqueue_assets' );

/* =============================================================
   3. ENQUEUE — SCRIPTS
   ============================================================= */
function cv_enqueue_scripts() {
    $ver = wp_get_theme()->get( 'Version' );

    // YouTube IFrame API (assíncrono, sem bloquear renderização)
    wp_enqueue_script(
        'youtube-iframe-api',
        'https://www.youtube.com/iframe_api',
        [],
        null,
        true
    );

    // Script principal do tema (player + AJAX + UI)
    wp_enqueue_script(
        'cv-main-js',
        get_stylesheet_directory_uri() . '/assets/js/main.js',
        [ 'youtube-iframe-api' ],
        $ver,
        true
    );

    // Localização JS do tema (complementa o cvData do plugin)
    wp_localize_script( 'cv-main-js', 'cvTheme', [
        'themeUrl'    => get_stylesheet_directory_uri(),
        'homeUrl'     => home_url( '/' ),
        'searchUrl'   => home_url( '/?s=' ),
        'rankingUrl'  => home_url( '/ranking/' ),
        'musicasUrl'  => home_url( '/musicas/' ),
        'contaUrl'    => home_url( '/minha-conta/' ),
        'contatoUrl'  => home_url( '/contato/' ),
        'placeholder' => get_stylesheet_directory_uri() . '/assets/img/placeholder.jpg',
    ] );
}
add_action( 'wp_enqueue_scripts', 'cv_enqueue_scripts' );

/* =============================================================
   4. BODY CLASS — adiciona cv-dark-theme em todas as páginas
   ============================================================= */
function cv_body_classes( $classes ) {
    $classes[] = 'cv-dark-theme';

    if ( is_singular( 'musica' ) ) {
        $classes[] = 'cv-single-musica';
    }
    if ( is_post_type_archive( 'musica' ) ) {
        $classes[] = 'cv-archive-musica';
    }
    if ( is_front_page() ) {
        $classes[] = 'cv-home';
    }

    return $classes;
}
add_action( 'body_class', 'cv_body_classes' );

/* =============================================================
   5. DESATIVA ASTRA HEADER/FOOTER NATIVOS
   Permite que o tema filho use header.php e footer.php próprios
   sem conflito com os blocos do Astra.
   ============================================================= */
function cv_disable_astra_header() {
    // Remove o header padrão do Astra para usar o header.php do tema filho
    remove_action( 'astra_header', 'astra_header_markup' );
}
add_action( 'init', 'cv_disable_astra_header' );

function cv_disable_astra_footer() {
    // Remove o footer padrão do Astra para usar o footer.php do tema filho
    remove_action( 'astra_footer', 'astra_footer_markup' );
}
add_action( 'init', 'cv_disable_astra_footer' );

/* =============================================================
   6. FILTRO DE BUSCA — apenas CPT musica
   ============================================================= */
function cv_search_only_musica( $query ) {
    if ( ! is_admin() && $query->is_main_query() && $query->is_search() ) {
        $query->set( 'post_type', [ 'musica' ] );
    }
}
add_action( 'pre_get_posts', 'cv_search_only_musica' );

/* =============================================================
   7. SHORTCODES DO TEMA
   ============================================================= */

// [cv_card_grid quantidade="6" ordenar="mais_tocadas|novas|ranking"]
function cv_shortcode_card_grid( $atts ) {
    $atts = shortcode_atts( [
        'quantidade' => 6,
        'ordenar'    => 'novas',
    ], $atts, 'cv_card_grid' );

    $args = [
        'post_type'      => 'musica',
        'posts_per_page' => intval( $atts['quantidade'] ),
        'post_status'    => 'publish',
    ];

    switch ( $atts['ordenar'] ) {
        case 'mais_tocadas':
            $args['meta_key'] = '_cv_play_count';
            $args['orderby']  = 'meta_value_num';
            $args['order']    = 'DESC';
            break;
        case 'ranking':
            $args['meta_key'] = '_cv_ranking_score';
            $args['orderby']  = 'meta_value_num';
            $args['order']    = 'DESC';
            break;
        default: // novas
            $args['orderby'] = 'date';
            $args['order']   = 'DESC';
            break;
    }

    $query = new WP_Query( $args );
    if ( ! $query->have_posts() ) return '';

    ob_start();
    echo '<div class="cv-card-grid">';
    while ( $query->have_posts() ) {
        $query->the_post();
        if ( function_exists( 'cv_render_card_grid' ) ) {
            echo cv_render_card_grid( get_the_ID() );
        }
    }
    echo '</div>';
    wp_reset_postdata();

    return ob_get_clean();
}
add_shortcode( 'cv_card_grid', 'cv_shortcode_card_grid' );

// [cv_newsletter] — formulário newsletter AJAX
function cv_shortcode_newsletter() {
    ob_start();
    get_template_part( 'template-parts/newsletter' );
    return ob_get_clean();
}
add_shortcode( 'cv_newsletter', 'cv_shortcode_newsletter' );

/* =============================================================
   8. TEMPLATE PARTS — registra suporte
   ============================================================= */
function cv_register_template_parts() {
    // Garante que o diretório template-parts existe (apenas aviso, não cria)
    // Os template-parts são: header-inner, footer-inner, card, player, newsletter, whatsapp
}
add_action( 'after_setup_theme', 'cv_register_template_parts' );

/* =============================================================
   9. REMOVE METABOXES DESNECESSÁRIOS DO ASTRA NO CPT musica
   ============================================================= */
function cv_cleanup_metaboxes() {
    remove_meta_box( 'astra_settings_meta_box', 'musica', 'side' );
}
add_action( 'add_meta_boxes', 'cv_cleanup_metaboxes', 99 );

/* =============================================================
   10. LARGURA DO CONTEÚDO — sobrescreve Astra para dark full-width
   ============================================================= */
function cv_content_width() {
    $GLOBALS['content_width'] = 1280;
}
add_action( 'after_setup_theme', 'cv_content_width', 0 );

/* =============================================================
   11. PÁGINA DE LOGIN PERSONALIZADA (Ultimate Member)
   ============================================================= */
function cv_login_redirect( $redirect_to, $request, $user ) {
    if ( isset( $user->roles ) && in_array( 'subscriber', $user->roles ) ) {
        return home_url( '/minha-conta/' );
    }
    return $redirect_to;
}
add_filter( 'login_redirect', 'cv_login_redirect', 10, 3 );

/* =============================================================
   12. RANK MATH — desativa schema automático no CPT musica
   (o plugin cv já tem dados estruturados próprios)
   ============================================================= */
function cv_rankmath_disable_auto_schema( $enabled, $type, $object ) {
    if ( $type === 'musica' ) return false;
    return $enabled;
}
// Apenas ativa se Rank Math estiver instalado
if ( class_exists( 'RankMath' ) ) {
    add_filter( 'rank_math/schema/enabled', 'cv_rankmath_disable_auto_schema', 10, 3 );
}