//
//  RookPermissions.swift
//  Plugin
//
//  Created by Francisco Guerrero Escamilla on 02/05/24.
//  Copyright © 2024 Max Lynch. All rights reserved.
//

import Foundation
import Capacitor
import RookSDK

@objc public class RookPermissions: NSObject {
  private let permissionsManager: RookConnectPermissionsManager = RookConnectPermissionsManager()

  @objc public func requestAppleHealthPermissions(call: CAPPluginCall) {
    let jsArray: JSArray? = call.getArray("types")
    var healthTypes: [HealthDataType] = []
    for jsValue in jsArray ?? [] {
      if let stringType: String = jsValue as? String,
         let type: HealthDataType = HealthDataType(rawValue: stringType) {
        healthTypes.append(type)
      }
    }

    permissionsManager.requestPermissions(healthTypes) { result in
      switch result {
      case .success(let success):
        call.resolve(["result": success])
      case .failure(let error):
        call.reject(error.localizedDescription)
      }
    }
  }

  @objc func requestDietaryWritePermissions(call: CAPPluginCall) {
    permissionsManager.requestDietaryWritePermissions { result in
      switch result {
      case .success(let success):
        call.resolve(["result": success])
      case .failure(let error):
        call.reject(error.localizedDescription)
      }
    }
  }

  @objc public func requestAllHealthConnectPermissions(call: CAPPluginCall) {
    call.unimplemented("Not implemented on iOS.")
  }

  @objc public func openIOSAppleHealth(call: CAPPluginCall) {
    guard let urlSettings: URL = URL(string:  "x-apple-health://") else {
      return call.reject("Apple not installed on iOS.")
    }
    DispatchQueue.main.async {
      UIApplication.shared.open(urlSettings, options: [:]) { result in
        call.resolve(["result" : result])
      }
    }
  }

  @objc public func openHealthConnectSettings(call: CAPPluginCall) {
    call.unimplemented("Not implemented on iOS.")
  }

  @objc public func healthConnectHasPermissions(call: CAPPluginCall) {
    call.unimplemented("Not implemented on iOS.")
  }

  @objc public func requestAndroidBackgroundPermissions(call: CAPPluginCall) {
    call.unimplemented("Not implemented on iOS.")
  }
}
