import Foundation

/// 广告样式枚举
///
/// - `rawValue` 用于沙盒目录名和文件名前缀（小写英文，≤ 12 字符）
/// - `adType` 映射到 CreativeAuditGateway API 的 `ad_info.ad_type` 整数值
/// - `init?(adType:)` 提供反向映射，供 SDK 从 `MMAdInfo.adType` 推导样式
public enum MaterialStyle: String, CaseIterable, Codable {
    case native       = "native"        // 原生广告，ad_type = 0
    case rewarded     = "rewarded"      // 激励视频，ad_type = 1
    case banner       = "banner"        // Banner，ad_type = 2
    case interstitial = "interstitial"  // 插屏广告，ad_type = 3
    case splash       = "splash"        // 开屏广告，ad_type = 4

    /// 映射到 CreativeAuditGateway API 的 ad_type 整数值
    public var adType: Int {
        switch self {
        case .native:       return 0
        case .rewarded:     return 1
        case .banner:       return 2
        case .interstitial: return 3
        case .splash:       return 4
        }
    }

    /// 反向映射：从 MMAdInfo.adType Int 还原 MaterialStyle（保留，供内部 ObjC 兼容桥接使用）
    ///
    /// - Parameter adType: 广告类型整数值
    /// - Returns: 对应的 `MaterialStyle`；无法识别时返回 `nil`
    public init?(adType: Int) {
        switch adType {
        case 0: self = .native
        case 1: self = .rewarded
        case 2: self = .banner
        case 3: self = .interstitial
        case 4: self = .splash
        default: return nil
        }
    }

    /// 从广告格式字符串推导 MaterialStyle（对齐 Android AdInfoResolver.resolveStyle）
    ///
    /// 字符串来源：
    ///   - TopOn 回调 extra 中 `kATADDelegateExtraADSourceTypeKey` 对应的 `ATAdFormat` 整数
    ///     经 `MaterialStyle(adType:)` 转换后的 `rawValue`（"banner" / "rewarded" 等）
    ///   - 历史兼容：TopOn 格式名称字符串（"Banner" / "RewardedVideo" 等）
    /// 大小写不敏感。
    ///
    /// - Parameter format: 广告格式字符串
    /// - Returns: 对应的 `MaterialStyle`；无法识别时返回 `nil`，调用方应记录日志后跳过采集
//    public init?(format: String) {
//        switch format.lowercased() {
//        case "banner":                    self = .banner
//        case "interstitial":              self = .interstitial
//        case "rewardedvideo", "rewarded": self = .rewarded   // rawValue & TopOn 格式名均支持
//        case "native":                    self = .native
//        case "splash":                    self = .splash
//        default: return nil
//        }
//    }
}
