local _, ns = ...;

-- ============================================================
--  Moonlight_bloodlust – Options
--  Handles both:
--    [A] "LustAlert"  : Show icon + timer when Bloodlust is CAST
--    [B] "ReadyAlert" : Notify when Bloodlust debuff EXPIRES (ready again)
-- ============================================================

-- ============================================================
--  사운드 목록을 SoundList.lua에서 동적으로 읽어 구성합니다.
--  새 파일 추가 시 SoundList.lua만 수정하면 됩니다.
-- ============================================================

-- 파일 확장자를 자동으로 결정하는 헬퍼
-- SoundList에 등록된 이름에서 확장자를 포함하면 그대로 사용,
-- 확장자가 없으면 .ogg 시도 후 .mp3 폴백.
-- WoW PlaySoundFile은 실제로 .mp3/.ogg 둘 다 지원하지만
-- 경로에 공백이 있으면 재생에 실패하므로 파일명에 공백 금지.
local SOUND_EXT_OVERRIDE = {}   -- name -> "full_name_with_ext"

local function ResolveSoundPath(name)
    local base = "Interface\\AddOns\\Moonlight_bloodlust\\Sounds\\"
    -- 이미 확장자가 붙어 있는 경우 그대로 사용
    if name:match("%.ogg$") or name:match("%.mp3$") then
        return base .. name
    end
    -- 오버라이드 테이블에 있으면 우선 사용 (ADDON_LOADED 이후 설정됨)
    if SOUND_EXT_OVERRIDE[name] then
        return base .. SOUND_EXT_OVERRIDE[name]
    end
    -- 기본: .ogg 먼저, 없으면 .mp3 (런타임 판별 불가이므로 등록명 기반)
    return base .. name .. ".ogg"
end

-- mp3 파일로 알려진 이름 목록 (SoundList 파싱 후 채워짐)
local function RegisterExtensions(files)
    for _, filename in ipairs(files) do
        if filename:match("%.mp3$") then
            local stem = filename:gsub("%.mp3$", "")
            SOUND_EXT_OVERRIDE[stem] = filename
        elseif filename:match("%.ogg$") then
            local stem = filename:gsub("%.ogg$", "")
            SOUND_EXT_OVERRIDE[stem] = filename
        end
        -- 확장자 없는 이름은 .ogg 기본
    end
end

local SOUNDS = {}

-- SoundList.lua에서 파일 목록 읽기
if MOONLIGHT_BLOODLUST_SOUND_FILES then
    -- 확장자 오버라이드 먼저 등록
    RegisterExtensions(MOONLIGHT_BLOODLUST_SOUND_FILES)
    for _, filename in ipairs(MOONLIGHT_BLOODLUST_SOUND_FILES) do
        -- 표시 이름은 확장자 제거한 stem 사용
        local stem = filename:gsub("%.ogg$", ""):gsub("%.mp3$", "")
        table.insert(SOUNDS, {
            name     = stem,
            path     = ResolveSoundPath(stem),
            duration = 40.0,
        })
    end
end

ns.SOUNDS = SOUNDS;

local CHANNELS = {
    { name = "주음량",   key = "Master"   },
    { name = "효과",     key = "SFX"      },
    { name = "환경소리", key = "Ambience" },
    { name = "대화",     key = "Dialog"   },
}
ns.CHANNELS = CHANNELS;

-- ReadyAlert mp3 
local READY_MP3 = "Ready.mp3";
local READY_MSG = "블러드 사용 가능";
ns.READY_MP3 = READY_MP3;
ns.READY_MSG = READY_MSG;

-- ReadyAlert default options 
local ReadyAlert_Defaults = {
    ClassOnly  = true,
    VoiceAlert = true,
    InRaid     = false,
    FontSize   = 30,
    ShowTime   = 2,
}
ns.readyOpts = CopyTable(ReadyAlert_Defaults);

-- SettingsPanel registration
-- WoW 기본 설정 패널에는 "/mlb 열기" 버튼만 등록합니다.
-- 실제 옵션은 모두 /mlb 커스텀 창에서 관리합니다.

function ns.SetupOptionPanels()
    -- 저장된 값을 ns.readyOpts에 동기화 (Settings API 없이 직접 처리)
    if MLB_DB.readyOpts == nil then
        MLB_DB.readyOpts = CopyTable(ReadyAlert_Defaults);
    end
    for k, v in pairs(ReadyAlert_Defaults) do
        if MLB_DB.readyOpts[k] == nil then
            MLB_DB.readyOpts[k] = v;
        end
        ns.readyOpts[k] = MLB_DB.readyOpts[k];
    end

    -- WoW 설정 패널: 커스텀 캔버스로 버튼만 표시
    local canvas = CreateFrame("Frame", nil, UIParent)

    -- 제목
    local titleFS = canvas:CreateFontString(nil, "OVERLAY", "GameFontNormalLarge");
    titleFS:SetPoint("TOPLEFT", canvas, "TOPLEFT", 10, -10);
    titleFS:SetText("|cffffcc00Moonlight|r_Bloodlust");

    -- 설명
    local desc = canvas:CreateFontString(nil, "OVERLAY", "GameFontHighlight");
    desc:SetPoint("TOPLEFT", titleFS, "BOTTOMLEFT", 0, -8);
    desc:SetText("모든 설정은 /mlb 커스텀 창에서 관리합니다.");
    desc:SetTextColor(0.8, 0.8, 0.8);

    -- /mlb 열기 버튼
    local btn = CreateFrame("Button", nil, canvas, "UIPanelButtonTemplate");
    btn:SetSize(220, 36);
    btn:SetPoint("TOPLEFT", desc, "BOTTOMLEFT", 0, -16);
    btn:SetText("Moonlight_Bloodlust 설정 창 열기");
    btn:SetScript("OnClick", function()
        SettingsPanel:Hide();
        local sf = _G["MoonlightBloodlustSettings"];
        if sf then
            if sf:IsShown() then sf:Hide() else sf:Show() end
        end
    end);

    -- 슬래시 커맨드 안내
    local hint = canvas:CreateFontString(nil, "OVERLAY", "GameFontHighlightSmall");
    hint:SetPoint("TOPLEFT", btn, "BOTTOMLEFT", 0, -10);
    hint:SetText("슬래시 명령어:  /mlb");
    hint:SetTextColor(0.55, 0.55, 0.55);

    local layout = Settings.RegisterCanvasLayoutCategory(canvas, "!Moonlight_블러드");
    Settings.RegisterAddOnCategory(layout);
end
