// 每日签到弹窗事件代理，先迁移按钮与遮罩事件，签到业务仍由 Blade 主脚本维护。

let dailySignInEventsBound = false;

/**
 * 调用每日签到存量全局函数。
 *
 * @param {string} functionName 全局函数名
 * @param {...unknown} args 参数
 * @returns {void}
 */
function callDailySignInGlobal(functionName, ...args) {
    // 当前模块只负责 data-* 事件到旧函数的桥接，接口请求和日历渲染暂不迁移。
    if (typeof window[functionName] === "function") {
        window[functionName](...args);
    }
}

/**
 * 读取每日签到月份翻页目标。
 *
 * @param {"prev"|"next"|string} direction 翻页方向
 * @returns {string|null}
 */
function resolveDailySignInMonth(direction) {
    if (direction === "prev") {
        return window.dailySignInState?.prevMonth || null;
    }

    if (direction === "next") {
        return window.dailySignInState?.nextMonth || null;
    }

    return null;
}

/**
 * 绑定每日签到弹窗遮罩、关闭、签到、补签卡和月份切换事件。
 *
 * @returns {void}
 */
export function bindDailySignInControls() {
    if (dailySignInEventsBound || typeof document === "undefined") {
        return;
    }

    dailySignInEventsBound = true;
    document.addEventListener("click", (event) => {
        if (!(event.target instanceof Element)) {
            return;
        }

        const overlay = event.target.closest("[data-daily-sign-modal-overlay]");
        // 只在点击遮罩本身时关闭，避免点击弹窗内容区误触关闭。
        if (overlay && event.target === overlay) {
            callDailySignInGlobal("closeDailySignInModal");
            return;
        }

        if (event.target.closest("[data-daily-sign-close]")) {
            event.preventDefault();
            callDailySignInGlobal("closeDailySignInModal");
            return;
        }

        if (event.target.closest("[data-daily-sign-claim]")) {
            event.preventDefault();
            callDailySignInGlobal("claimDailySignInFromModal");
            return;
        }

        if (event.target.closest("[data-daily-sign-buy-repair-card]")) {
            event.preventDefault();
            callDailySignInGlobal("buyDailySignRepairCard");
            return;
        }

        const monthButton = event.target.closest("[data-daily-sign-month]");
        if (monthButton) {
            event.preventDefault();
            // 月份状态仍由 window.dailySignInState 维护，模块只读取方向并转发旧加载函数。
            callDailySignInGlobal("loadDailySignInCalendar", resolveDailySignInMonth(monthButton.getAttribute("data-daily-sign-month") || ""));
        }
    });
}
