package com.remax.bill.ads.bidding

import android.content.Context
import com.remax.base.ext.KvStringDelegate

/**
 * 广告聚合源控制器
 * 用于管理当前聚合源选择（同时应用于插页和激励广告）
 * 支持持久化存储，默认为空表示使用竞价逻辑
 */
object AdSourceController {

    /**
     * 聚合源类型
     */
    enum class AdSource {
        BIDDING,  // 竞价（默认）
        ADMOB,    // AdMob
        PANGLE,   // Pangle
        TOPON     // TopOn
    }

    // 当前聚合源（持久化）
    private var currentSource by KvStringDelegate("ad_source_current", null)

    /**
     * 获取当前聚合源
     * @return AdSource，如果为空则返回 BIDDING（竞价）
     */
    fun getCurrentSource(): AdSource {
        return currentSource?.let { 
            try {
                AdSource.valueOf(it)
            } catch (e: Exception) {
                AdSource.BIDDING
            }
        } ?: AdSource.BIDDING
    }

    /**
     * 设置当前聚合源
     * @param source AdSource
     */
    fun setCurrentSource(source: AdSource) {
        currentSource = source.name
    }

    /**
     * 获取聚合源显示名称
     */
    fun getSourceDisplayName(source: AdSource): String {
        return when (source) {
            AdSource.BIDDING -> "竞价"
            AdSource.ADMOB -> "Admob"
            AdSource.PANGLE -> "Pangle"
            AdSource.TOPON -> "Topon"
        }
    }

    /**
     * 获取所有可用的聚合源
     */
    fun getAllSources(): List<AdSource> {
        return listOf(
            AdSource.BIDDING,
            AdSource.ADMOB,
            AdSource.PANGLE,
            AdSource.TOPON
        )
    }

    /**
     * 显示聚合源选择弹窗
     * @param context 上下文
     * @param onSourceChanged 聚合源改变后的回调，用于刷新UI
     */
    fun showAdSourceSelection(context: Context, onSourceChanged: () -> Unit = {}) {
        val currentSource = getCurrentSource()
        AdSourceSelectionBottomSheet.show(context, currentSource) { selectedSource ->
            setCurrentSource(selectedSource)
            onSourceChanged()
        }
    }
}

