(function () {
    'use strict';
    if (window.HerNotificationSystem) {
        return;
    }

    class HerNotificationSystem {
        constructor() {
            this.queue = [];
            this.isShowing = false;
            this.locale = 'ko';
            this.context = 'content'; // 'content', 'voice-memos', 'popup' 등
            this.history = [];
            this.maxHistory = 30;
            this.maxQueue = 10;
            this.currentToast = null;
            this._bindI18nListener();
        }

        init() {
        }

        setLocale(locale) {
            this.locale = locale;
        }
        setContext(context) {
            this.context = context;
        }

        /**
         * 메시지 키 기반 알림 표시 (중복 방지, 우선순위, 큐/히스토리)
         * @param {string} messageKey - messages.json의 키
         * @param {object} options - { vars, type, duration, priority }
         */
        showNotification(messageKey, options = {}) {
            const { type = 'info', duration = 2000 } = options;
            // 현재 표시 중인 알림과 같으면 무시
            if (this.currentToast && this.currentToast.messageKey === messageKey) {
                return;
            }
            const message = this.getMessage ? this.getMessage(messageKey) : messageKey;
            // 기존 알림 제거
            this.clearCurrentToast();
            // 새 알림 생성
            this.currentToast = {
                messageKey,
                message,
                type,
                duration,
                element: this.createToastElement(message, type)
            };
            // 표시
            document.body.appendChild(this.currentToast.element);
            // 자동 제거
            setTimeout(() => {
                this.clearCurrentToast();
            }, duration);
        }

        createToastElement(message, type) {
            const toast = document.createElement('div');
            toast.className = `her-notification her-notification--${this.context} her-notification--${type}`;
            toast.textContent = message;
            // 위치 및 스타일 설정
            toast.style.position = 'fixed';
            toast.style.bottom = '20px';
            toast.style.left = '50%';
            toast.style.transform = 'translateX(-50%)';
            toast.style.zIndex = '2147483647';
            toast.style.maxWidth = '90vw';
            return toast;
        }

        clearCurrentToast() {
            if (this.currentToast && this.currentToast.element) {
                this.currentToast.element.remove();
                this.currentToast = null;
            }
        }

        /**
         * 다국어 메시지 변환 (herI18n 연동, 복수형/치환자/실시간)
         */
        getMessage(key, vars) {
            let msg = key;
            if (window.herI18n && typeof window.herI18n.t === 'function') {
                msg = window.herI18n.t(key, vars);
            }
            // 치환자 추가 처리 (herI18n이 지원하지 않을 경우 대비)
            if (vars && typeof msg === 'string') {
                Object.keys(vars).forEach(k => {
                    msg = msg.replace(new RegExp(`{${k}}`, 'g'), vars[k]);
                });
            }
            return msg;
        }

        /**
         * 최근 알림 재표시
         */
        showLastNotification() {
            if (this.history.length === 0) return;
            const last = this.history[this.history.length - 1];
            this.showNotification(last.key, { vars: last.vars, type: 'info', duration: 1500 });
        }

        /**
         * 언어 변경 시 활성 알림 실시간 업데이트
         */
        _bindI18nListener() {
            if (window.herI18n && typeof window.herI18n.on === 'function') {
                window.herI18n.on('languageChanged', () => {
                    // 현재 표시 중인 알림을 새 언어로 갱신
                    document.querySelectorAll('.her-notification').forEach(el => {
                        const id = el.getAttribute('data-her-toast-id');
                        const hist = this.history.find(h => h.id === id);
                        if (hist) {
                            el.innerText = this.getMessage(hist.key, hist.vars);
                        }
                    });
                });
            }
        }
    }

    // 인스턴스 생성 및 전역 등록
    window.HerNotificationSystem = new HerNotificationSystem();

    // Core Manager에 등록
    if (window.HerCoreManager) {
        window.HerCoreManager.registerModule('HerNotificationSystem', window.HerNotificationSystem);
    } else {
        // Core Manager가 아직 로딩되지 않았다면 대기
        window.addEventListener('load', () => {
            if (window.HerCoreManager) {
                window.HerCoreManager.registerModule('HerNotificationSystem', window.HerNotificationSystem);
            }
        });
    }

    // 알림 토스트 메시지 번역 함수
    function getToastMessage(key) {
        if (window.herI18n) {
            return window.herI18n.t(key);
        }
        return key;
    }
    // her-language-changed 이벤트 발생 시 기존 알림이 있으면 텍스트 즉시 갱신
    window.addEventListener('her-language-changed', () => {
        document.querySelectorAll('.her-toast[data-i18n]').forEach(el => {
            const key = el.getAttribute('data-i18n');
            if (window.herI18n) {
                const newText = window.herI18n.t(key);
                if (newText !== key) {
                    el.textContent = newText;
                }
            }
        });
    });
})(); 