///
/// HybridEspProvToolkitSpec.swift
/// This file was generated by nitrogen. DO NOT MODIFY THIS FILE.
/// https://github.com/mrousavy/nitro
/// Copyright © Marc Rousavy @ Margelo
///

import NitroModules

/// See ``HybridEspProvToolkitSpec``
public protocol HybridEspProvToolkitSpec_protocol: HybridObject {
  // Properties
  

  // Methods
  func searchForESPDevices(devicePrefix: String, transport: PTTransport, security: PTSecurity) throws -> Promise<PTSearchResult>
  func stopSearchingForESPDevices() throws -> Void
  func createESPDevice(deviceName: String, transport: PTTransport, security: PTSecurity, proofOfPossession: String?, softAPPassword: String?, username: String?) throws -> Promise<PTResult>
  func getESPDevice(deviceName: String) throws -> PTDeviceResult
  func doesESPDeviceExist(deviceName: String) throws -> Bool
  func scanWifiListOfESPDevice(deviceName: String) throws -> Promise<PTWifiScanResult>
  func connectToESPDevice(deviceName: String) throws -> Promise<PTSessionResult>
  func disconnectFromESPDevice(deviceName: String) throws -> PTResult
  func provisionESPDevice(deviceName: String, ssid: String, password: String) throws -> Promise<PTProvisionResult>
  func isESPDeviceSessionEstablished(deviceName: String) throws -> PTBooleanResult
  func sendDataToESPDevice(deviceName: String, path: String, data: String) throws -> Promise<PTStringResult>
  func getIPv4AddressOfESPDevice(deviceName: String) throws -> PTStringResult
  func getCurrentNetworkSSID() throws -> Promise<PTStringResult>
  func requestLocationPermission() throws -> Void
  func registerLocationStatusCallback(callback: @escaping (_ level: PTLocationAccess) -> Promise<Bool>) throws -> Double
  func removeLocationStatusCallback(id: Double) throws -> Bool
  func getCurrentLocationStatus() throws -> PTLocationAccess
  func nativeErrorToNumber(error: PTError) throws -> Double
}

public extension HybridEspProvToolkitSpec_protocol {
  /// Default implementation of ``HybridObject.toString``
  func toString() -> String {
    return "[HybridObject EspProvToolkit]"
  }
}

/// See ``HybridEspProvToolkitSpec``
open class HybridEspProvToolkitSpec_base {
  private weak var cxxWrapper: HybridEspProvToolkitSpec_cxx? = nil
  public init() { }
  public func getCxxWrapper() -> HybridEspProvToolkitSpec_cxx {
  #if DEBUG
    guard self is any HybridEspProvToolkitSpec else {
      fatalError("`self` is not a `HybridEspProvToolkitSpec`! Did you accidentally inherit from `HybridEspProvToolkitSpec_base` instead of `HybridEspProvToolkitSpec`?")
    }
  #endif
    if let cxxWrapper = self.cxxWrapper {
      return cxxWrapper
    } else {
      let cxxWrapper = HybridEspProvToolkitSpec_cxx(self as! any HybridEspProvToolkitSpec)
      self.cxxWrapper = cxxWrapper
      return cxxWrapper
    }
  }
}

/**
 * A Swift base-protocol representing the EspProvToolkit HybridObject.
 * Implement this protocol to create Swift-based instances of EspProvToolkit.
 * ```swift
 * class HybridEspProvToolkit : HybridEspProvToolkitSpec {
 *   // ...
 * }
 * ```
 */
public typealias HybridEspProvToolkitSpec = HybridEspProvToolkitSpec_protocol & HybridEspProvToolkitSpec_base
