//
//  Plugin.swift
//  Astro
//
//  Created by Jeremy Wiebe on 2015-04-28.
//  Copyright (c) 2015 Mobify Research & Development Inc. All rights reserved.
//

import Foundation

open class Plugin: BaseMessageReceiver, Addressable {
    @objc public let address: MessageAddress
    let messageBus: MessageBus
    public let pluginResolver: PluginResolver
    @objc let options: JSONObject?

    public required init(address: MessageAddress, messageBus: MessageBus, pluginResolver: PluginResolver, options: JSONObject?) {
        self.address = address
        self.messageBus = messageBus
        self.pluginResolver = pluginResolver
        self.options = options

        super.init()
    }

    @objc public func trigger(_ eventName: String, params: JSONObject = JSONObject()) {
        let eventMessage = EventMessage(to: self.eventAddress, from: self.address, eventName: eventName, params: params)
        messageBus.send(eventMessage)
    }

    @objc open func onPluginRemoved() { }
}

protocol ParentPlugin {
    func removeChildPlugin(_ child: ViewPlugin)
    func pwaNavigate(_ webViewPlugin: WebViewPlugin, params: JSONObject, respond: RPCMethodCallback)
    func pwaRendered(respond: RPCMethodCallback)
}
