// Popup Script 수정 (단일 창 관리)
(function () {
    'use strict';
    if (window.HerPopup) {
        return;
    }

    class HerPopup {
        constructor() {
            this.uiLanguage = 'ko';
            this.speechLanguage = 'ko-KR';
            this.fieldEnabled = true;
            this.autoSendTimer = 2; // 기본값 2초
            this.availableLanguages = [];
            this.isOpening = false;

            this.featureMarqueeTimer = null;
            this.currentFeatureIndex = 0;

            this.setupDOM();
            this.init();

            // 언어 변경 이벤트 리스너 등록
            window.addEventListener('her-language-changed', () => {
                this.updateLanguageUI();
                this.updateFeatureMarquee();
            });
        }

        setupDOM() {
            this.settingsButton = document.getElementById('settingsButton');
            this.settingsModal = document.getElementById('settingsModal');
            this.modalClose = document.getElementById('modalClose');
            this.languageOptions = document.getElementById('languageOptions');
            this.fieldToggle = document.getElementById('fieldToggle');
            this.modalAutoClipboardToggle = document.getElementById('modalAutoClipboardToggle');
            this.languageSelect = document.getElementById('languageSelect');
            this.openRecorderButton = document.getElementById('openRecorder');
            this.headerVideo = document.getElementById('headerVideo');
            this.autoSendTimerInput = document.getElementById('autoSendTimer');
        }

        async init() {
            // Amplitude 이벤트 추가
            if (window.amplitude) {
                window.amplitude.incrementUserProperty('total_sessions');
                window.amplitude.setUserProperties({
                    last_seen_date: new Date().toISOString().slice(0, 10)
                });
                window.amplitude.trackEvent('Session Started', {
                    session_source: 'popup'
                });
            }

            // i18n 대기 (간소화)
            await this.waitForI18n();

            // 설정 로드
            await this.loadSettings();

            // 언어 목록 로드
            await this.loadLanguages();

            // 이벤트 리스너 설정
            this.setupEventListeners();

            // UI 업데이트
            this.updateUI();

            // 기능 순환 시작 (초기 언어로)
            this.updateFeatureMarquee();

            // 배경 비디오 재생
            this.setupVideo();
        }

        async waitForI18n() {
            return new Promise((resolve) => {
                // i18n이 없어도 진행하도록 단순화
                if (window.herI18n) {
                    resolve();
                } else {
                    setTimeout(resolve, 100);
                }
            });
        }

        setupVideo() {
            if (this.headerVideo) {
                // 비디오 경로 수정
                this.headerVideo.src = chrome.runtime.getURL('assets/background_video.mp4');
                
                this.headerVideo.addEventListener('loadeddata', () => {
                    this.headerVideo.play().catch(error => {
                        console.error('[Popup] 비디오 자동 재생 실패:', error);
                    });
                });

                this.headerVideo.addEventListener('error', (e) => {
                    console.error('[Popup] 비디오 로드 실패:', e);
                    // 비디오 실패 시 단색 배경으로 대체
                    this.headerVideo.style.display = 'none';
                });
            }
        }

        async loadSettings() {
            try {
                const storage = await chrome.storage.sync.get([
                    'uiLanguage',
                    'selectedLanguage',
                    'voiceIntelligenceEnabled',
                    'autoClipboardCopy',
                    'autoSendTimer'
                ]);

                this.uiLanguage = storage.uiLanguage || 'ko';
                this.speechLanguage = storage.selectedLanguage || 'ko-KR';
                this.fieldEnabled = storage.voiceIntelligenceEnabled !== false;
                this.autoSendTimer = storage.autoSendTimer !== undefined ? storage.autoSendTimer : 2; // 기본값 2초
                this.autoClipboardCopy = storage.autoClipboardCopy !== false; // 기본값을 true로 변경

                // i18n 언어 즉시 설정
                if (window.herI18n) {
                    await window.herI18n.setUILanguage(this.uiLanguage);
                }

                // 🎯 설정 로드 후 UI 업데이트
                this.updateUI();

            } catch (error) {
                console.error('[Popup] 설정 로드 실패:', error);
            }
        }

        async loadLanguages() {
            try {
                const response = await fetch(chrome.runtime.getURL('data/languages.json'));
                const data = await response.json();
                this.availableLanguages = data.languages || [];
                this.populateLanguageSelect();
            } catch (error) {
                console.error('[Popup] 언어 목록 로드 실패:', error);
                // 폴백 언어 목록
                this.availableLanguages = [
                    { code: 'ko-KR', name: '한국어', flag: '🇰🇷' },
                    { code: 'en-US', name: 'English (US)', flag: '🇺🇸' },
                    { code: 'ja-JP', name: '日本語', flag: '🇯🇵' },
                    { code: 'zh-CN', name: '中文 (简体)', flag: '🇨🇳' },
                    { code: 'es-ES', name: 'Español', flag: '🇪🇸' },
                    { code: 'fr-FR', name: 'Français', flag: '🇫🇷' }
                ];
                this.populateLanguageSelect();
            }
        }

        populateLanguageSelect() {
            if (!this.languageSelect) return;

            this.languageSelect.innerHTML = '';
            this.availableLanguages.forEach(lang => {
                const option = document.createElement('option');
                option.value = lang.code;
                option.textContent = `${lang.flag} ${lang.name}`;
                this.languageSelect.appendChild(option);
            });
            this.languageSelect.value = this.speechLanguage;
        }

        setupEventListeners() {
            // 설정 버튼
            if (this.settingsButton) {
                this.settingsButton.addEventListener('click', (e) => {
                    e.preventDefault();
                    e.stopPropagation();
                    this.showLanguageModal();
                });
            }

            // 모달 닫기
            if (this.modalClose) {
                this.modalClose.addEventListener('click', (e) => {
                    e.preventDefault();
                    e.stopPropagation();
                    this.hideLanguageModal();
                });
            }

            // 음성 메모 버튼
            if (this.openRecorderButton) {
                this.openRecorderButton.addEventListener('click', (e) => {
                    e.preventDefault();
                    e.stopPropagation();
                    this.openVoiceMemos();
                });
            }

            // 음성 입력 토글
            if (this.fieldToggle) {
                this.fieldToggle.addEventListener('click', (e) => {
                    e.preventDefault();
                    e.stopPropagation();
                    this.toggleFieldEnabled();
                });
            }

            // 자동 전송 타이머 입력
            if (this.autoSendTimerInput) {
                this.autoSendTimerInput.addEventListener('input', (e) => {
                    const value = parseInt(e.target.value);
                    if (value >= 0 && value <= 10) {
                        this.updateAutoSendTimer(value);
                    }
                });
            }

            // 🎯 자동 클립보드 복사 토글 (모달)
            if (this.modalAutoClipboardToggle) {
                this.modalAutoClipboardToggle.addEventListener('click', (e) => {
                    e.preventDefault();
                    e.stopPropagation();
                    this.toggleAutoClipboardCopy();
                });
            }

            // 언어 선택
            if (this.languageSelect) {
                this.languageSelect.addEventListener('change', (e) => {
                    this.changeSpeechLanguage(e.target.value);
                });
            }

            // 모달 외부 클릭 시 닫기
            if (this.settingsModal) {
                this.settingsModal.addEventListener('click', (e) => {
                    if (e.target === this.settingsModal) {
                        this.hideLanguageModal();
                    }
                });
            }
        }

        async toggleFieldEnabled() {
            this.fieldEnabled = !this.fieldEnabled;

            // Amplitude 이벤트 추가
            if (window.amplitude) {
                window.amplitude.setUserProperties({
                    on_page_input_enabled: this.fieldEnabled
                });
                window.amplitude.trackEvent('OnPage Input Toggled', {
                    status: this.fieldEnabled
                });
            }

            try {
                await chrome.storage.sync.set({ voiceIntelligenceEnabled: this.fieldEnabled });
                this.updateUI();
            } catch (error) {
                console.error('[Popup] 토글 설정 저장 실패:', error);
            }
        }

        async updateAutoSendTimer(seconds) {
            this.autoSendTimer = seconds;
            try {
                await chrome.storage.sync.set({ autoSendTimer: this.autoSendTimer });
                if (seconds === 0) {
                    // console.log('[Popup] 자동 전송 비활성화');
                } else {
                    // console.log(`[Popup] 자동 전송 타이머 설정: ${this.autoSendTimer}초`);
                }
            } catch (error) {
                console.error('[Popup] 타이머 설정 저장 실패:', error);
            }
        }

        // 🎯 자동 클립보드 복사 토글
        async toggleAutoClipboardCopy() {
            this.autoClipboardCopy = !this.autoClipboardCopy;

            // Amplitude 이벤트 추가
            if (window.amplitude) {
                window.amplitude.setUserProperties({
                    auto_clipboard_copy_enabled: this.autoClipboardCopy
                });
                window.amplitude.trackEvent('Auto Clipboard Copy Toggled', {
                    status: this.autoClipboardCopy
                });
            }

            try {
                await chrome.storage.sync.set({ autoClipboardCopy: this.autoClipboardCopy });
                this.updateUI();
            } catch (error) {
                console.error('[Popup] 자동 클립보드 복사 토글 설정 저장 실패:', error);
            }
        }

        async changeSpeechLanguage(language) {
            const previousLanguage = this.speechLanguage;
            this.speechLanguage = language;

            // Amplitude 이벤트 추가
            if (window.amplitude) {
                window.amplitude.setUserProperties({
                    stt_language: language
                });
                window.amplitude.trackEvent('STT Language Selected', {
                    selected_language: language,
                    previous_language: previousLanguage,
                    source: 'popup_dropdown'
                });
            }

            try {
                await chrome.storage.sync.set({ selectedLanguage: language });
            } catch (error) {
                console.error('[Popup] 언어 변경 저장 실패:', error);
            }
        }

        async changeUILanguage(language) {
            try {
                const previousLanguage = this.uiLanguage;
                
                // Amplitude 이벤트 추가
                if (window.amplitude) {
                    window.amplitude.setUserProperties({
                        ui_language: language
                    });
                    window.amplitude.trackEvent('UI Language Selected', {
                        selected_language: language,
                        previous_language: previousLanguage,
                        source: 'settings_modal'
                    });
                }

                // 1. 내부 상태 즉시 변경
                this.uiLanguage = language;

                // 2. i18n 언어 즉시 설정
                if (window.herI18n) {
                    await window.herI18n.setUILanguage(language);
                }

                // 3. UI 즉시 업데이트
                this.updateLanguageUI();

                // 4. Feature marquee 즉시 업데이트
                this.updateFeatureMarquee();

                // 5. Storage에 저장 (백그라운드로)
                chrome.storage.sync.set({ uiLanguage: language }).then(() => {
                    // console.log('[Popup] 언어 설정 저장 완료:', language);
                });

                // 6. 다른 탭들에게 알림
                this.notifyOtherTabs(language);

            } catch (error) {
                console.error('[Popup] UI 언어 변경 실패:', error);
            }
        }

        updateLanguageUI() {
            document.querySelectorAll('[data-i18n]').forEach(el => {
                const key = el.getAttribute('data-i18n');
                if (window.herI18n) {
                    const newText = window.herI18n.t(key);
                    if (newText !== key) {
                        // 툴팁의 경우 \n을 실제 줄바꿈으로 변환
                        if (el.classList.contains('custom-tooltip')) {
                            el.textContent = newText.replace(/\\n/g, '\n');
                        } else {
                            el.textContent = newText;
                        }
                    }
                }
            });
            // ... (기타 UI 상태 갱신)
            if (this.fieldToggle) {
                this.fieldToggle.classList.toggle('active', this.fieldEnabled);
            }
            if (this.languageSelect) {
                this.languageSelect.value = this.speechLanguage;
            }
            
            // 타이머 입력 값만 업데이트 (섹션은 삭제됨)
            if (this.autoSendTimerInput) {
                this.autoSendTimerInput.value = this.autoSendTimer;
            }
        }

        getFeatures() {
            return [
                window.herI18n.t('feature1'),
                window.herI18n.t('feature2'),
                window.herI18n.t('feature3')
            ];
        }

        updateFeatureMarquee() {
            const featureElement = document.querySelector('#featuresMarquee .feature-text');
            if (!featureElement || !window.herI18n) return;

            const features = this.getFeatures();
            this.currentFeatureIndex = 0;
            featureElement.style.opacity = '0';
            featureElement.style.transform = 'translateY(10px)';
            setTimeout(() => {
                featureElement.textContent = features[0];
                featureElement.style.opacity = '1';
                featureElement.style.transform = 'translateY(0)';
                this.currentFeatureIndex = 1;
            }, 150);

            // 기존 타이머 제거
            if (this.featureMarqueeTimer) clearInterval(this.featureMarqueeTimer);

            // 새 타이머 시작 (언어 바뀔 때마다 새 배열로)
            this.featureMarqueeTimer = setInterval(() => {
                const features = this.getFeatures(); // 항상 최신 언어로!
                featureElement.style.opacity = '0';
                featureElement.style.transform = 'translateY(10px)';
                setTimeout(() => {
                    featureElement.textContent = features[this.currentFeatureIndex];
                    featureElement.style.opacity = '1';
                    featureElement.style.transform = 'translateY(0)';
                    this.currentFeatureIndex = (this.currentFeatureIndex + 1) % features.length;
                }, 150);
            }, 3000);
        }

        async notifyOtherTabs(language) {
            try {
                // 다른 탭들에게 언어 변경 알림
                const tabs = await chrome.tabs.query({});
                tabs.forEach(tab => {
                    chrome.tabs.sendMessage(tab.id, {
                        action: 'languageChanged',
                        language: language
                    }).catch(() => {
                        // 메시지를 받을 수 없는 탭은 무시
                    });
                });
            } catch (error) {
                // 오류 무시 (선택사항)
            }
        }

        updateUI() {
            this.updateLanguageUI();
            this.updateToggleStates();
        }

        updateToggleStates() {
            // 음성 입력 토글 상태 업데이트
            if (this.fieldToggle) {
                if (this.fieldEnabled) {
                    this.fieldToggle.classList.add('active');
                } else {
                    this.fieldToggle.classList.remove('active');
                }
            }

            // 🎯 자동 클립보드 복사 토글 상태 업데이트 (모달만)
            if (this.modalAutoClipboardToggle) {
                if (this.autoClipboardCopy) {
                    this.modalAutoClipboardToggle.classList.add('active');
                } else {
                    this.modalAutoClipboardToggle.classList.remove('active');
                }
            }
        }

        showLanguageModal() {
            this.setupLanguageModal();
            if (this.settingsModal) {
                this.settingsModal.classList.add('show');
            }
        }

        hideLanguageModal() {
            if (this.settingsModal) {
                this.settingsModal.classList.remove('show');
            }
        }

        setupLanguageModal() {
            if (!this.languageOptions) return;

            const uiLanguages = [
                { code: 'ko', name: '한국어', flag: '🇰🇷' },
                { code: 'en', name: 'English', flag: '🇺🇸' }
            ];

            this.languageOptions.innerHTML = '';
            uiLanguages.forEach(lang => {
                const option = document.createElement('div');
                option.className = 'language-option' + (lang.code === this.uiLanguage ? ' selected' : '');
                option.innerHTML = `
                    <span class="language-option-text">${lang.flag} ${lang.name}</span>
                    <span class="language-option-check"></span>
                `;

                option.addEventListener('click', () => {
                    this.changeUILanguage(lang.code);
                    this.hideLanguageModal();
                });

                this.languageOptions.appendChild(option);
            });
        }

        async openVoiceMemos() {
            // 중복 실행 방지
            if (this.isOpening) {
                return;
            }
            
            this.isOpening = true;
            
            try {
                // Background script에 요청 (간소화)
                const response = await chrome.runtime.sendMessage({
                    action: 'openVoiceMemos'
                });
                
            } catch (error) {
                console.error('[Popup] 음성 메모 열기 실패:', error);
            } finally {
                // 플래그 해제
                this.isOpening = false;
            }
        }
    }

    // 초기화
    window.HerPopup = HerPopup;
    
    // DOM 준비 시 초기화
    if (document.readyState === 'loading') {
        document.addEventListener('DOMContentLoaded', () => {
            new HerPopup();
        });
    } else {
        new HerPopup();
    }
})();