// 도메인별 설정 관리 (개선된 버전)
(function () {
    'use strict';

    if (window.HerDomainManager) {
        return;
    }

    class HerDomainManager {
        constructor() {
            // 도메인별 버튼 위치 조정 설정
            this.domainPositionConfig = {
                // ChatGPT (OpenAI)
                '*.openai.com': {
                    input: { x: 0, y: 0 },
                    textarea: { x: 0, y: 0 },
                    contenteditable: { x: -26, y: -4 }
                },
                'chatgpt.com': {
                    input: { x: 0, y: 0 },
                    textarea: { x: 0, y: 0 },
                    contenteditable: { x: -26, y: -4 }
                },
                // Claude
                'claude.ai': {
                    input: { x: 0, y: 0 },
                    textarea: { x: 0, y: 0 },
                    contenteditable: { x: 26, y: -4 }
                },
                // Google (Gemini, Bard)
                'google.com': {
                    input: { x: -80, y: 0 },
                    textarea: { x: -40, y: 8 },
                    contenteditable: { x: -80, y: 0 }
                },
                'gemini.google.com': {
                    input: { x: 0, y: 0 },
                    textarea: { x: 0, y: 0 },
                    contenteditable: { x: -30, y: 0 }
                },
                // Perplexity
                'perplexity.ai': {
                    input: { x: 0, y: 0 },
                    textarea: { x: 0, y: 0 },
                    contenteditable: { x: -30, y: 0 }
                },
                // X (Grok)
                'x.com': {
                    input: { x: 0, y: 0 },
                    textarea: { x: -42, y: 6 },
                    contenteditable: { x: 0, y: 0 }
                },
                // Notion
                'notion.so': {
                    input: { x: 0, y: 0 },
                    textarea: { x: 0, y: 0 },
                    contenteditable: { x: -46, y: 10 }
                },
                // 한국 사이트들
                'naver.com': {
                    input: { x: 0, y: 14 },
                    textarea: { x: -30, y: 0 },
                    contenteditable: { x: -30, y: 0 }
                },
                // YouTube
                'www.youtube.com': {
                    input: { x: -40, y: -4 },
                    textarea: { x: 0, y: 0 },
                    contenteditable: { x: 0, y: 0 }
                },
                // 기본값
                'default': {
                    input: { x: 0, y: 0 },
                    textarea: { x: 0, y: 0 },
                    contenteditable: { x: 0, y: 0 }
                }
            };
        }

        /**
         * 현재 도메인과 입력 요소 타입에 맞는 위치 설정을 반환
         * @param {HTMLElement} input - 입력 요소
         * @returns {Object} { x, y } 오프셋 값
         */
        getPositionConfig(input) {
            const domain = window.location.hostname;
            const inputType = this.getInputType(input);
            // 최소 로그: 도메인, inputType, 적용 위치
            const config = this.findDomainConfig(domain);
            const position = config[inputType] || config.default || { x: 0, y: 0 };
            return position;
        }

        /**
         * 입력 요소의 타입을 결정
         * @param {HTMLElement} input 
         * @returns {string} 'input', 'textarea', 'contenteditable'
         */
        getInputType(input) {
            if (input.tagName === 'INPUT') {
                return 'input';
            } else if (input.tagName === 'TEXTAREA') {
                return 'textarea';
            } else if (input.isContentEditable || input.contentEditable === 'true') {
                return 'contenteditable';
            }
            return 'input'; // 기본값
        }

        /**
         * 도메인에 맞는 설정을 찾음 (서브도메인 지원)
         * @param {string} hostname 
         * @returns {Object} 도메인 설정
         */
        findDomainConfig(hostname) {
            // 간결 로그: 매칭된 도메인
            if (this.domainPositionConfig[hostname]) {
                return this.domainPositionConfig[hostname];
            }
            const parts = hostname.split('.');
            if (parts.length >= 2) {
                const mainDomain = parts.slice(-2).join('.');
                if (this.domainPositionConfig[mainDomain]) {
                    return this.domainPositionConfig[mainDomain];
                }
            }
            for (const domain in this.domainPositionConfig) {
                if (domain !== 'default' && hostname.includes(domain)) {
                    return this.domainPositionConfig[domain];
                }
            }
            return this.domainPositionConfig.default;
        }

        /**
         * 레거시 호환성을 위한 메서드
         */
        static getConfigForDomain(domain) {
            if (window.HerDomainManager) {
                const manager = window.HerDomainManager;
                const config = manager.findDomainConfig(domain);
                return config.input || { x: 0, y: 0 };
            }
            return { x: 0, y: 0 };
        }

        /**
         * 설정 업데이트 (개발/테스트용)
         */
        updateDomainConfig(domain, inputType, position) {
            if (!this.domainPositionConfig[domain]) {
                this.domainPositionConfig[domain] = {};
            }
            this.domainPositionConfig[domain][inputType] = position;
        }

        /**
         * 현재 설정 디버그 출력
         */
        debugCurrentConfig() {
            const domain = window.location.hostname;
            const config = this.findDomainConfig(domain);
            return config;
        }
    }

    // 전역 등록
    window.HerDomainManager = new HerDomainManager();
})();