import SwiftUI

public protocol KitComposeApi {
    func request(funcName: String, params: Any?) -> String
    func request(funcName: String, params: Any?, onResponse: ((String) -> Void)?) -> String
    func requestCallback(funcName: String, params: Any?, onResponse: ((String) -> Void)?)
    func removeCallback(id: String)
}

public class MiniAppContext {
    public var appId: String = ""
    public var appCode: String = ""
    public var appName: Any? = nil
    public var appIcon: String = ""
    public var description: Any? = nil
    public var support: [String: Any] = [:]
    public var toolkitConfig: [String: Any] = [:]
    public var providerId: String = "momo"
    public var permissions: [[String: Any]] = []
    
    public init(appId: String, appCode: String, appName: Any? = nil, appIcon: String, description: Any? = nil, support: [String: Any] = [:], toolkitConfig: [String: Any] = [:], providerId: String = "momo", permissions: [[String: Any]] = []) {
        self.appId = appId
        self.appCode = appCode
        self.appName = appName
        self.appIcon = appIcon
        self.description = description
        self.support = support
        self.toolkitConfig = toolkitConfig
        self.providerId = providerId
        self.permissions = permissions
    }
}

public class KitConfig {
    public var trustBanner: TrustBannerData? = nil
    public var headerBar: String? = nil
    public var headerGradient: String? = nil
}

public class ApplicationEnvironment: ObservableObject {
    let applicationContext: MiniAppContext?
    let composeApi: KitComposeApi?
    let config: KitConfig?
    
    public init(applicationContext: MiniAppContext? = nil, composeApi: KitComposeApi? = nil, config: KitConfig? = nil) {
        self.applicationContext = applicationContext
        self.composeApi = composeApi
        self.config = config
    }
}
