/**
 * Lecteur audio intégré universel pour Funkwhale et Castopod
 * Permet de lire les morceaux/épisodes directement dans la page
 */

(function() {
    'use strict';

    let currentlyPlayingItem = null;
    let currentAudioElement = null;

    /**
     * Arrête l'élément en cours de lecture
     */
    function stopCurrentItem() {
        if (currentAudioElement) {
            currentAudioElement.pause();
            currentAudioElement.currentTime = 0;
        }
        if (currentlyPlayingItem) {
            currentlyPlayingItem.classList.remove('playing');
            currentlyPlayingItem = null;
        }
    }

    /**
     * Démarre la lecture d'un élément
     */
    function playItem(item, audioElement) {
        // Arrêter l'élément actuel s'il y en a un
        if (currentlyPlayingItem && currentlyPlayingItem !== item) {
            stopCurrentItem();
        }

        currentlyPlayingItem = item;
        currentAudioElement = audioElement;

        // Marquer comme en cours de lecture
        item.classList.add('playing');

        // Démarrer la lecture
        audioElement.play().catch(function(error) {
            console.error('Erreur lors de la lecture:', error);
            stopCurrentItem();
        });
    }

    /**
     * Met en pause l'élément
     */
    function pauseItem(item, audioElement) {
        audioElement.pause();
        item.classList.remove('playing');
    }

    /**
     * Initialise les contrôles du lecteur pour un type d'élément
     */
    function initPlayerForType(itemSelector, buttonSelector) {
        const items = document.querySelectorAll(itemSelector);

        items.forEach(function(item) {
            const playButton = item.querySelector(buttonSelector);
            const audioElement = item.querySelector('audio');

            if (!playButton || !audioElement) {
                return;
            }

            // Gestion du clic sur le bouton play/pause
            playButton.addEventListener('click', function(e) {
                e.preventDefault();
                e.stopPropagation();

                if (item.classList.contains('playing')) {
                    pauseItem(item, audioElement);
                } else {
                    playItem(item, audioElement);
                }
            });

            // Gérer la fin de la lecture
            audioElement.addEventListener('ended', function() {
                item.classList.remove('playing');

                // Passer automatiquement à l'élément suivant
                const nextItem = item.nextElementSibling;
                if (nextItem && (nextItem.classList.contains('funkwhale-track-item') ||
                                 nextItem.classList.contains('castopod-episode-item'))) {
                    const nextAudio = nextItem.querySelector('audio');
                    if (nextAudio) {
                        playItem(nextItem, nextAudio);
                    }
                } else {
                    // Réinitialiser si c'était le dernier élément
                    currentlyPlayingItem = null;
                    currentAudioElement = null;
                }
            });

            // Gérer les erreurs de chargement
            audioElement.addEventListener('error', function(e) {
                console.error('Erreur de chargement audio:', e);
                item.classList.remove('playing');

                // Afficher un message d'erreur temporaire
                const titleSelector = item.classList.contains('funkwhale-track-item') ?
                    '.funkwhale-track-title' : '.castopod-episode-title';
                const title = item.querySelector(titleSelector);

                if (title) {
                    const originalText = title.textContent;
                    title.textContent = 'Erreur de lecture';
                    title.style.color = '#ff0000';

                    setTimeout(function() {
                        title.textContent = originalText;
                        title.style.color = '';
                    }, 3000);
                }
            });
        });
    }

    /**
     * Initialise tous les lecteurs
     */
    function initPlayer() {
        // Initialiser le lecteur Funkwhale
        initPlayerForType('.funkwhale-track-item', '.funkwhale-play-btn');

        // Initialiser le lecteur Castopod
        initPlayerForType('.castopod-episode-item', '.castopod-play-btn');
    }

    // Initialiser le lecteur quand le DOM est prêt
    if (document.readyState === 'loading') {
        document.addEventListener('DOMContentLoaded', initPlayer);
    } else {
        initPlayer();
    }

    // Nettoyer à la fermeture de la page
    window.addEventListener('beforeunload', function() {
        stopCurrentItem();
    });
})();
