// Copyright 2019-2023 Tauri Programme within The Commons Conservancy
// SPDX-License-Identifier: Apache-2.0
// SPDX-License-Identifier: MIT

import SwiftRs
import Tauri
import UIKit
import WebKit

enum WriteOptions: Codable {
  case plainText(text: String)
}

enum ReadClipData: Codable {
  case plainText(text: String)
}

class ClipboardPlugin: Plugin {
  @objc public func writeText(_ invoke: Invoke) throws {
    let options = try invoke.parseArgs(WriteOptions.self)
    let clipboard = UIPasteboard.general
    switch options {
    case .plainText(let text):
      clipboard.string = text
    default:
      invoke.unimplemented()
      return
    }
    invoke.resolve()

  }

  @objc public func readText(_ invoke: Invoke) throws {
    let clipboard = UIPasteboard.general
    if let text = clipboard.string {
      invoke.resolve(ReadClipData.plainText(text: text))
    } else {
      invoke.reject("Clipboard is empty")
    }
  }
    
  @objc public func clear(_ invoke: Invoke) throws {
      let clipboard = UIPasteboard.general
      clipboard.items = []
      invoke.resolve()
    }
}

@_cdecl("init_plugin_clipboard")
func initPlugin() -> Plugin {
  return ClipboardPlugin()
}
