// =============================================================================
// 1MZ AUDIO PLAYER - VERSÃO FINAL (V5 - NAVIGATION FIX)
// =============================================================================

var imzCurrentPlayer = null;
var imzCurrentUpdateInterval = null;

function initializeYouTubePlayer() {
    const playerContainer = document.getElementById('imz-audio-player-container');
    if (!playerContainer) return;

    const videoId = playerContainer.dataset.videoId;
    if (!videoId) {
        console.error('1MZ Player: Nenhum ID de vídeo encontrado.');
        return;
    }

    // --- DESTRUIR PLAYER ANTERIOR (se existir) ---
    if (imzCurrentPlayer) {
        try { 
            imzCurrentPlayer.stopVideo();
            imzCurrentPlayer.destroy(); 
        } catch(e) {
            // Player anterior pode já estar destruído — seguro ignorar
        }
        imzCurrentPlayer = null;
    }
    if (imzCurrentUpdateInterval) {
        clearInterval(imzCurrentUpdateInterval);
        imzCurrentUpdateInterval = null;
    }

    // Remover classe de inicialização anterior
    playerContainer.classList.remove('imz-player-initialized');
    playerContainer.classList.remove('player-ready');

    // Recriar o placeholder do iframe (o YT API substitui o div original por um iframe)
    var oldPlaceholder = document.getElementById('youtube-iframe-placeholder');
    if (oldPlaceholder) {
        oldPlaceholder.remove();
    }
    var placeholder = document.createElement('div');
    placeholder.id = 'youtube-iframe-placeholder';
    playerContainer.appendChild(placeholder);

    // Marcar como inicializado
    playerContainer.classList.add('imz-player-initialized');

    // --- SELETORES DOM ---
    const playPauseBtn = playerContainer.querySelector('.imz-player-play-pause-btn');
    const playIcon = playPauseBtn.querySelector('.play-icon');
    const pauseIcon = playPauseBtn.querySelector('.pause-icon');
    const seekBar = playerContainer.querySelector('.imz-player-seek-slider');
    const progressBar = playerContainer.querySelector('.imz-player-fill');
    const currentTimeEl = playerContainer.querySelector('.imz-player-time-current');
    const durationEl = playerContainer.querySelector('.imz-player-time-duration');
    const statusLight = null; // removed in v2
    const optionsBtn = playerContainer.querySelector('.imz-player-options-btn');
    const popupOptions = playerContainer.querySelector('.imz-player-popup-options');
    const volumeSlider = playerContainer.querySelector('.imz-player-volume-slider');
    const repeatBtn = playerContainer.querySelector('.imz-player-repeat-btn');
    
    // Variáveis de Estado
    let player;
    let isLooping = true; 
    let isDragging = false;
    let updateInterval = null;
    let isReady = false;

    // Variáveis de tracking de reprodução
    let playTimeAccumulated = 0;  // Segundos acumulados de reprodução
    let playTrackingTimer = null; // Intervalo do timer
    let playTracked = false;      // Já foi registado nesta sessão?
    const PLAY_MIN_SECONDS = 30;  // Mínimo de segundos para validar

    // --- INICIALIZAÇÃO DO YOUTUBE PLAYER ---
    player = new YT.Player('youtube-iframe-placeholder', {
        height: '1', 
        width: '1',
        videoId: videoId,
        playerVars: { 
            'playsinline': 1,
            'controls': 0,
            'disablekb': 1,
            'fs': 0,
            'rel': 0,
            'origin': window.location.origin
        },
        events: {
            'onReady': onPlayerReady,
            'onStateChange': onPlayerStateChange,
            'onError': onPlayerError
        }
    });

    // --- EVENTOS DO PLAYER ---

    function onPlayerReady(event) {
        isReady = true;
        imzCurrentPlayer = player; // Guardar referência global
        
        const duration = player.getDuration();
        updateTimeDisplay(durationEl, duration);
        
        if(seekBar) {
            seekBar.max = duration;
            seekBar.value = 0;
            seekBar.disabled = false;
        }

        // Define volume inicial (100) mas NÃO força depois
        player.setVolume(100);
        if(volumeSlider) volumeSlider.value = 100;

        clearInterval(updateInterval);
        updateInterval = setInterval(updateProgress, 250);
        imzCurrentUpdateInterval = updateInterval; // Guardar referência global
        
        enableKeyboardControls();
        playerContainer.classList.add('player-ready');
        
        // Esconde o iframe
        const iframe = document.getElementById('youtube-iframe-placeholder') || event.target.getIframe();
        if(iframe) {
            iframe.style.opacity = '0';
            iframe.style.position = 'absolute';
            iframe.style.zIndex = '-1';
        }
    }

    function onPlayerStateChange(event) {
        if (event.data === YT.PlayerState.BUFFERING) {
            playerContainer.classList.add('buffering');
        } else {
            playerContainer.classList.remove('buffering');
        }

        if (event.data === YT.PlayerState.PLAYING) {
            playIcon.style.display = 'none';
            pauseIcon.style.display = 'block';
            if(statusLight) statusLight.classList.add('playing');

            // Iniciar timer de contagem de reprodução
            if (!playTracked && !playTrackingTimer) {
                playTrackingTimer = setInterval(function() {
                    playTimeAccumulated++;
                    if (playTimeAccumulated >= PLAY_MIN_SECONDS && !playTracked) {
                        playTracked = true;
                        clearInterval(playTrackingTimer);
                        playTrackingTimer = null;
                        // Registar reprodução válida
                        var postId = playerContainer.dataset.postId || '';
                        var ajaxUrl = '';
                        if (typeof imz_player_data !== 'undefined') ajaxUrl = imz_player_data.ajax_url;
                        else if (typeof imz_download_ajax_data !== 'undefined') ajaxUrl = imz_download_ajax_data.ajax_url;
                        if (postId && ajaxUrl) {
                            var fd = new FormData();
                            fd.append('action', 'imz_track_play');
                            fd.append('post_id', postId);
                            fd.append('listen_seconds', playTimeAccumulated);
                            fetch(ajaxUrl, { method: 'POST', body: fd });
                        }
                    }
                }, 1000);
            }
        } else {
            playIcon.style.display = 'block';
            pauseIcon.style.display = 'none';
            if(statusLight) statusLight.classList.remove('playing');

            // Pausar timer quando não está a reproduzir (pausa, buffer, etc.)
            if (playTrackingTimer) {
                clearInterval(playTrackingTimer);
                playTrackingTimer = null;
            }
        }

        if (event.data === YT.PlayerState.ENDED) {
            if (isLooping) {
                player.seekTo(0);
                player.playVideo();
            } else {
                player.seekTo(0);
                player.pauseVideo();
                updateProgress();
            }
        }
    }

    function onPlayerError(event) {
        console.error('1MZ Player: Erro detetado:', event.data);
        let errorMsg = 'Erro ao carregar.';
        if (event.data === 100 || event.data === 101 || event.data === 150) {
            errorMsg = 'Música indisponível.';
        }
        if(statusLight) statusLight.style.backgroundColor = 'red';
        clearInterval(updateInterval);
        playerContainer.classList.remove('buffering');
    }

    // --- CONTROLOS (BOTÕES) ---

    playPauseBtn.addEventListener('click', togglePlay);

    function togglePlay() {
        if (!isReady || !player || typeof player.getPlayerState !== 'function') return;
        const state = player.getPlayerState();
        if (state === YT.PlayerState.PLAYING || state === YT.PlayerState.BUFFERING) {
            player.pauseVideo();
        } else {
            player.playVideo();
        }
    }

    // --- LÓGICA DE PROGRESSO ---

    function updateProgress() {
        if (isDragging || !player || !player.getCurrentTime) return;

        const currentTime = player.getCurrentTime();
        const duration = player.getDuration();
        
        // --- CORREÇÃO: REMOVIDA A PROTEÇÃO FORÇADA DE VOLUME AQUI ---
        // O código anterior estava aqui a forçar setVolume(100)

        if (duration > 0) {
            const progressPercent = (currentTime / duration) * 100;
            if (seekBar) seekBar.value = currentTime;
            if (progressBar) progressBar.style.width = progressPercent + '%';
            if (currentTimeEl) updateTimeDisplay(currentTimeEl, currentTime);
        }
    }

    if (seekBar) {
        seekBar.disabled = true;
        
        const startDrag = () => { isDragging = true; };
        
        const endDrag = () => {
            if (!isReady) return;
            const seekToTime = seekBar.value;
            player.seekTo(seekToTime, true);
            isDragging = false;
        };

        const whileDragging = () => {
            const val = seekBar.value;
            const max = seekBar.max;
            const percent = (val / max) * 100;
            if(progressBar) progressBar.style.width = percent + '%';
            if(currentTimeEl) updateTimeDisplay(currentTimeEl, val);
        };

        seekBar.addEventListener('mousedown', startDrag);
        seekBar.addEventListener('touchstart', startDrag, {passive: true});
        seekBar.addEventListener('change', endDrag); 
        seekBar.addEventListener('touchend', endDrag);
        seekBar.addEventListener('input', whileDragging);
    }

    // --- VOLUME (CORRIGIDO) ---

    if (volumeSlider) {
        // Usa o evento 'input' para ser imediato ao arrastar
        volumeSlider.addEventListener('input', () => {
            if(isReady && player && typeof player.setVolume === 'function') {
                const vol = parseInt(volumeSlider.value);
                player.setVolume(vol);
                
                // Opcional: Se for 0, garante mute real
                if(vol === 0 && !player.isMuted()) player.mute();
                else if(vol > 0 && player.isMuted()) player.unMute();
            }
        });
    }

    if (repeatBtn) {
        repeatBtn.addEventListener('click', () => {
            isLooping = !isLooping;
            repeatBtn.classList.toggle('active');
            repeatBtn.title = isLooping ? 'Repetir (Ativado)' : 'Repetir (Desativado)';
        });
    }

    // --- MENU E TECLADO ---

    if (optionsBtn && popupOptions) {
        optionsBtn.addEventListener('click', (e) => {
            e.stopPropagation();
            popupOptions.classList.toggle('visible');
        });
        document.addEventListener('click', (e) => {
            if (!popupOptions.contains(e.target) && !optionsBtn.contains(e.target)) {
                popupOptions.classList.remove('visible');
            }
        });
    }

    function enableKeyboardControls() {
        document.addEventListener('keydown', (e) => {
            if (e.target.tagName === 'INPUT' || e.target.tagName === 'TEXTAREA') return;
            if (!isReady) return;

            switch(e.code) {
                case 'Space':
                    e.preventDefault();
                    togglePlay();
                    break;
                case 'ArrowRight':
                    e.preventDefault();
                    player.seekTo(player.getCurrentTime() + 5, true);
                    break;
                case 'ArrowLeft':
                    e.preventDefault();
                    player.seekTo(player.getCurrentTime() - 5, true);
                    break;
            }
        });
    }

    function updateTimeDisplay(element, seconds) {
        if (!element) return;
        element.textContent = formatTime(seconds);
    }

    function formatTime(seconds) {
        if (!seconds || isNaN(seconds)) return '0:00';
        seconds = Math.floor(seconds);
        const h = Math.floor(seconds / 3600);
        const m = Math.floor((seconds % 3600) / 60);
        const s = seconds % 60;
        const mDisplay = m < 10 && h > 0 ? '0' + m : m;
        const sDisplay = s < 10 ? '0' + s : s;
        return h > 0 ? `${h}:${mDisplay}:${sDisplay}` : `${m}:${sDisplay}`;
    }
}

window.onYouTubeIframeAPIReady = function() {
    initializeYouTubePlayer();
};

// Polling robusto: verifica repetidamente se a API está pronta e o container existe
// Funciona em mobile onde há race conditions com cache da API
(function() {
    var attempts = 0;
    var maxAttempts = 50; // 50 x 200ms = 10 segundos máximo

    function tryInit() {
        attempts++;
        var container = document.getElementById('imz-audio-player-container');
        
        // Se não há container, não vale a pena continuar
        if (!container) return;
        
        // Se já foi inicializado, parar
        if (container.classList.contains('imz-player-initialized')) return;
        
        // Se a API está pronta, inicializar
        if (typeof YT !== 'undefined' && typeof YT.Player !== 'undefined') {
            initializeYouTubePlayer();
            return;
        }
        
        // Se ainda não está pronta e não atingimos o limite, tentar novamente
        if (attempts < maxAttempts) {
            setTimeout(tryInit, 200);
        }
    }

    // Iniciar polling quando o DOM estiver pronto
    if (document.readyState === 'loading') {
        document.addEventListener('DOMContentLoaded', function() {
            setTimeout(tryInit, 100);
        });
    } else {
        // DOM já está pronto (script carregado tarde)
        setTimeout(tryInit, 100);
    }

    // Observar mudanças no DOM (temas AJAX)
    document.addEventListener('DOMContentLoaded', function() {
        var contentArea = document.querySelector('.entry-content, .post-content, #content, main, article, .site-main, body');
        if (contentArea) {
            var observer = new MutationObserver(function() {
                var newPlayer = document.getElementById('imz-audio-player-container');
                if (newPlayer && !newPlayer.classList.contains('imz-player-initialized')) {
                    attempts = 0;
                    tryInit();
                }
            });
            observer.observe(contentArea, { childList: true, subtree: true });
        }
    });

    // History API navigation
    window.addEventListener('popstate', function() {
        setTimeout(function() { attempts = 0; tryInit(); }, 300);
    });
})();