export const DESKTOP_NOTIFICATION_SETTING_ID = 'desktop_notification'

export type NotificationSettingId =
    | 'favorite_live_start'
    | 'favorite_scheduled_start'
    | 'favorite_vod_upload'
    | 'favorite_post'
    | 'favorite_guestbook'
    | 'favorite_message'
    | 'comment_mention'
    | 'reply_mention'
    | 'content_like'
    | 'note_received'
    | 'my_station_post'
    | 'my_station_guestbook'
    | 'my_station_vod_upload'
    | 'sticker_gift'
    | 'ad_balloon'
    | 'subscription_start'

export type NotificationSettingItem = {
    id: NotificationSettingId
    pushEnabled: boolean
    recordEnabled: boolean
}

/** 與通知設定頁 UI 一致的預設值 */
export function getDefaultNotificationSettings(): NotificationSettingItem[] {
    return [
        { id: 'favorite_live_start', pushEnabled: true, recordEnabled: false },
        { id: 'favorite_scheduled_start', pushEnabled: true, recordEnabled: false },
        { id: 'favorite_vod_upload', pushEnabled: true, recordEnabled: true },
        { id: 'favorite_post', pushEnabled: true, recordEnabled: true },
        { id: 'favorite_guestbook', pushEnabled: true, recordEnabled: true },
        { id: 'favorite_message', pushEnabled: true, recordEnabled: true },
        { id: 'comment_mention', pushEnabled: false, recordEnabled: true },
        { id: 'reply_mention', pushEnabled: false, recordEnabled: true },
        { id: 'content_like', pushEnabled: false, recordEnabled: true },
        { id: 'note_received', pushEnabled: false, recordEnabled: true },
        { id: 'my_station_post', pushEnabled: false, recordEnabled: true },
        { id: 'my_station_guestbook', pushEnabled: false, recordEnabled: false },
        { id: 'my_station_vod_upload', pushEnabled: false, recordEnabled: true },
        { id: 'sticker_gift', pushEnabled: false, recordEnabled: true },
        { id: 'ad_balloon', pushEnabled: false, recordEnabled: true },
        { id: 'subscription_start', pushEnabled: false, recordEnabled: true },
    ]
}

const SETTING_ID_SET = new Set<string>(getDefaultNotificationSettings().map((s) => s.id))

export function isKnownNotificationSettingId(id: string): id is NotificationSettingId {
    return SETTING_ID_SET.has(id)
}

/**
 * 通知事件 type → 設定項 ID。
 * 未對應的系統通知（如家族）預設一律記錄並推播。
 */
export const NOTIFICATION_TYPE_TO_SETTING: Partial<Record<string, NotificationSettingId>> = {
    sticker_gift: 'sticker_gift',
    ad_balloon: 'ad_balloon',
    subscription_start: 'subscription_start',
    stream_live_start: 'favorite_live_start',
    favorite_live_start: 'favorite_live_start',
}

export function resolveNotificationSettingId(
    notificationType: string
): NotificationSettingId | null {
    const key = String(notificationType ?? '').trim()
    if (!key) return null
    return NOTIFICATION_TYPE_TO_SETTING[key] ?? null
}

export type MergedNotificationSettings = {
    desktopNotificationEnabled: boolean
    settings: NotificationSettingItem[]
}

export function mergeNotificationSettingsFromDb(
    rows: Array<{ id: string; pushEnabled: boolean; recordEnabled: boolean }>
): MergedNotificationSettings {
    const defaults = getDefaultNotificationSettings()
    const byId = new Map(rows.map((r) => [r.id, r]))
    const desktopRow = byId.get(DESKTOP_NOTIFICATION_SETTING_ID)

    return {
        desktopNotificationEnabled: desktopRow?.pushEnabled ?? false,
        settings: defaults.map((item) => {
            const saved = byId.get(item.id)
            if (!saved) return item
            return {
                ...item,
                pushEnabled: saved.pushEnabled,
                recordEnabled: saved.recordEnabled,
            }
        }),
    }
}
