import Flutter
import OpenIMCore
import UIKit

public typealias ImHandler = (_ methodCall: FlutterMethodCall, _ result: @escaping FlutterResult) -> Void

open class BaseServiceManager {
    public let channel: FlutterMethodChannel
    private var methodHandlers: [String: ImHandler] = [:]
    
    public init(channel: FlutterMethodChannel) {
        self.channel = channel
        self.registerHandlers()
    }
    
    public func handleMethod(call: FlutterMethodCall, result: @escaping FlutterResult) {
        let method: String = call.method
        guard let handler = methodHandlers[method] else {
            print("Handle MethodName Error: \(typeName(self))'s method: [\(method)] not found")
            return
        }
        handler(call, result)
    }
    
    public subscript(_ key: String) -> ImHandler? {
        get {
            methodHandlers[key]
        }
        set {
            methodHandlers[key] = newValue
        }
    }
    
    public func registerHandlers() {
        
    }
    
    public func callBack(_ result: @escaping FlutterResult, _ content: Any? = nil) {
        safeMainAsync {
            result(content)
        }
    }
}