//
//  SOMConfig.swift
//  OasisPlayerPlugin
//
//  Created by Roman Karpievich on 12/5/20.
//

import Foundation
import OasisPlayer

class SOMConfig {
    
    let domain: String
    let subdomain: String
    let isLongPlay: Bool
    let ads: [String]
    
    init(from playableDictionary: NSDictionary, configuration: NSDictionary) {
        let defaultDomain = configuration["som_plugin_init_domain"] as? String ?? ""
        let defaultSubdomain = configuration["som_plugin_init_subdomain"] as? String ?? ""
        
        self.domain = playableDictionary["domain"] as? String ?? defaultDomain
        self.subdomain = playableDictionary["subdomain"] as? String ?? defaultSubdomain
        self.isLongPlay = (playableDictionary["isLongPlay"] as? Bool) ?? false
        
        var midrollsString: [String] = []
        if let adMarker = playableDictionary["adMarker"] as? NSDictionary,
           let midrolls = adMarker["midrollOffsets"] as? [Double] {
            midrollsString = midrolls.map({ "\($0)s"})
        }
        
        var ads: [String] = []
        ads.append("start")
        ads.append(contentsOf: midrollsString)
        ads.append("end")
        
        let adExcludeValue = playableDictionary["adExclude"] as? String
        if let adExclude = AdExclude(string: adExcludeValue) {
            switch adExclude {
            case .all:
                ads = []
            case .midRoll:
                ads.append(contentsOf: ["start", "end"])
            case .postRoll:
                ads.append("start")
                ads.append(contentsOf: midrollsString)
            case .preRoll:
                ads.append(contentsOf: midrollsString)
                ads.append("end")
            }
        }
        
        self.ads = ads
        
        let countryCode = configuration["som_plugin_country_metadata"] as? String ?? "DE"
        let metadata = ["countryCode": countryCode]
        
//        SOMPlugin.onDidFinishLaunching(pageTopDomain: domain,
//                                       pageSubDomain: subdomain,
//                                       metadata: metadata)
    }
}

private enum AdExclude {
    case all
    case midRoll
    case postRoll
    case preRoll
    
    init?(string: String?) {
        switch string {
        case "#All#":
            self = .all
        case "#Mid-Roll#":
            self = .midRoll
        case "#Post-Roll#":
            self = .postRoll
        case "#Pre-Roll#":
            self = .preRoll
        default:
            return nil
        }
    }
}
