import Foundation
import Capacitor

@objc(SocketsPlugin)
public class SocketsPlugin: CAPPlugin, CAPBridgedPlugin {

	private lazy var implementation: Sockets = {
        return Sockets(plugin: self)
    }()

    public let identifier = "SocketsPlugin"
    public let jsName = "Sockets"
    public let pluginMethods: [CAPPluginMethod] = [
	    CAPPluginMethod(name: "create", returnType: CAPPluginReturnPromise),
        CAPPluginMethod(name: "connect", returnType: CAPPluginReturnPromise),
        CAPPluginMethod(name: "send", returnType: CAPPluginReturnPromise),
        CAPPluginMethod(name: "disconnect", returnType: CAPPluginReturnPromise)
    ]

    @objc func create(_ call: CAPPluginCall) {
        let id = call.getString("id") ?? UUID().uuidString
        let socket = implementation.create(id: id)
        call.resolve()
    }

    @objc func connect(_ call: CAPPluginCall) {
		let id = call.getString("id") ?? ""
        let host = call.getString("host") ?? ""
        let port = call.getInt("port") ?? 0
        let useTLS = call.getBool("useTLS") ?? false
        let acceptInvalidCertificates = call.getBool("acceptInvalidCertificates") ?? false
		implementation.connect(id: id, host: host, port: port, useTLS: useTLS, acceptInvalidCertificates: acceptInvalidCertificates)
        call.resolve()
	}

	@objc func send(_ call: CAPPluginCall) {
		let id = call.getString("id") ?? ""
		let message = call.getString("message") ?? ""
		implementation.send(id: id, message: message)
        call.resolve()
	}

	@objc func disconnect(_ call: CAPPluginCall) {
		let id = call.getString("id") ?? ""
		implementation.disconnect(id: id)
        call.resolve()
	}
}