// --- SISTEMA DE TOAST DE DONACIÓN (BOOMERMANIA) ---
// Muestra mensajes satíricos para incentivar donaciones durante la partida

const DonationToast = {
    // Configuración
    FIRST_APPEARANCE_MS: 180000,  // 3 minutos
    MIN_INTERVAL_MS: 300000,       // 5 minutos
    MAX_INTERVAL_MS: 600000,       // 10 minutos
    DISPLAY_DURATION_MS: 8000,     // 8 segundos visible
    UPDATE_INTERVAL_MS: 1000,      // Actualización cada segundo

    // Estado
    timeSinceStart: 0,
    timeSinceLastToast: 0,
    nextToastTime: 180000,  // Primera aparición a los 3 minutos
    isVisible: false,
    toastElement: null,
    timerInterval: null,
    updateInterval: null,

    // Inicializar el sistema
    init() {
        this.createToastElement();
        this.timeSinceStart = 0;
        this.timeSinceLastToast = 0;
        this.nextToastTime = this.FIRST_APPEARANCE_MS;
        this.startUpdateLoop();
    },

    // Iniciar loop de actualización
    startUpdateLoop() {
        if (this.updateInterval) return;
        this.updateInterval = setInterval(() => {
            this.update(this.UPDATE_INTERVAL_MS);
        }, this.UPDATE_INTERVAL_MS);
    },

    // Detener loop de actualización
    stopUpdateLoop() {
        if (this.updateInterval) {
            clearInterval(this.updateInterval);
            this.updateInterval = null;
        }
    },

    // Crear el elemento HTML del toast
    createToastElement() {
        // Remover si ya existe
        const existing = document.getElementById('donation-toast');
        if (existing) existing.remove();

        const toast = document.createElement('div');
        toast.id = 'donation-toast';
        toast.className = 'donation-toast';
        toast.innerHTML = `
            <div class="donation-toast-header">
                <span class="donation-toast-icon">☕</span>
                <span class="donation-toast-title">PUBLICIDAD SATIRICA</span>
                <button class="donation-toast-close" onclick="DonationToast.hide()">✕</button>
            </div>
            <div class="donation-toast-body">
                <p class="donation-toast-message"></p>
                <a href="https://ko-fi.com/jfrmorales" target="_blank" class="btn btn--kofi-toast">
                    ☕ Invítame a un café
                </a>
            </div>
            <div class="donation-toast-timer">
                <div class="donation-toast-timer-bar"></div>
            </div>
        `;

        document.body.appendChild(toast);
        this.toastElement = toast;
    },

    // Actualizar el sistema (llamar desde gameLoop)
    update(deltaMs) {
        // No mostrar si el juego no ha iniciado o terminó
        if (!gameState || !gameState.juegoIniciado || gameState.juegoTerminado) return;

        // Verificar que la pantalla de inicio no esté visible
        const startScreen = document.getElementById('start-screen');
        if (startScreen && startScreen.style.display !== 'none') return;

        // No mostrar si hay un modal activo
        const activeModal = document.querySelector('.modal.active');
        if (activeModal) return;

        // No mostrar si ya hay un toast visible
        if (this.isVisible) return;

        this.timeSinceStart += deltaMs;
        this.timeSinceLastToast += deltaMs;

        // Verificar si es hora de mostrar el toast
        if (this.timeSinceLastToast >= this.nextToastTime) {
            this.show();
        }
    },

    // Mostrar el toast
    show() {
        if (!this.toastElement) this.createToastElement();
        if (this.isVisible) return;

        // Obtener mensaje aleatorio
        const mensaje = typeof getRandomAnuncio === 'function'
            ? getRandomAnuncio('generico')
            : 'Apoya el desarrollo con un café';

        // Actualizar contenido
        const messageEl = this.toastElement.querySelector('.donation-toast-message');
        if (messageEl) {
            messageEl.textContent = `"${mensaje}"`;
        }

        // Resetear barra de tiempo
        const timerBar = this.toastElement.querySelector('.donation-toast-timer-bar');
        if (timerBar) {
            timerBar.style.width = '100%';
            timerBar.style.transition = 'none';
            // Forzar reflow
            timerBar.offsetHeight;
            timerBar.style.transition = `width ${this.DISPLAY_DURATION_MS}ms linear`;
            timerBar.style.width = '0%';
        }

        // Mostrar con animación
        this.toastElement.classList.add('visible');
        this.isVisible = true;

        // Programar ocultamiento automático
        this.timerInterval = setTimeout(() => {
            this.hide();
        }, this.DISPLAY_DURATION_MS);

        // Calcular próximo intervalo aleatorio
        this.nextToastTime = this.MIN_INTERVAL_MS +
            Math.random() * (this.MAX_INTERVAL_MS - this.MIN_INTERVAL_MS);
        this.timeSinceLastToast = 0;
    },

    // Ocultar el toast
    hide() {
        if (!this.toastElement) return;

        if (this.timerInterval) {
            clearTimeout(this.timerInterval);
            this.timerInterval = null;
        }

        this.toastElement.classList.remove('visible');
        this.isVisible = false;
    },

    // Resetear el sistema (para nueva partida)
    reset() {
        this.hide();
        this.timeSinceStart = 0;
        this.timeSinceLastToast = 0;
        this.nextToastTime = this.FIRST_APPEARANCE_MS;
        // Reiniciar loop si no está activo
        this.startUpdateLoop();
    },

    // Detener completamente
    stop() {
        this.hide();
        this.stopUpdateLoop();
    }
};

// --- ROTACIÓN DE TEXTO KO-FI EN INICIO ---
const KofiTextRotator = {
    currentIndex: 0,
    intervalId: null,
    ROTATION_INTERVAL_MS: 5000,  // 5 segundos

    // Inicializar rotación
    init() {
        const kofiLink = document.querySelector('.landing-kofi');
        if (!kofiLink) return;

        // Guardar referencia
        this.element = kofiLink;

        // Iniciar rotación
        this.startRotation();
    },

    // Iniciar rotación de textos
    startRotation() {
        if (this.intervalId) return;

        this.intervalId = setInterval(() => {
            this.rotate();
        }, this.ROTATION_INTERVAL_MS);
    },

    // Rotar al siguiente mensaje
    rotate() {
        if (!this.element) return;

        this.currentIndex++;
        const mensaje = typeof getAnuncioInicio === 'function'
            ? getAnuncioInicio(this.currentIndex)
            : 'Apoya el proyecto';

        // Animación de fade
        this.element.style.opacity = '0';
        setTimeout(() => {
            this.element.textContent = `☕ ${mensaje}`;
            this.element.style.opacity = '1';
        }, 200);
    },

    // Detener rotación
    stop() {
        if (this.intervalId) {
            clearInterval(this.intervalId);
            this.intervalId = null;
        }
    }
};

// Inicializar rotación cuando cargue el DOM
document.addEventListener('DOMContentLoaded', () => {
    KofiTextRotator.init();
});
