import Foundation
import UIKit

@objc(UNShareFileModule)
class UNShareFileModule: NSObject, RCTBridgeModule {
  static func moduleName() -> String! {
    "UNShareFileModule"
  }

  @objc static func requiresMainQueueSetup() -> Bool {
    return false
  }

  @objc func share(_ base64Data: String, filename: String, resolve: @escaping RCTPromiseResolveBlock, rejecter reject: @escaping RCTPromiseRejectBlock) {
    guard let data = Data(base64Encoded: base64Data) else {
      reject("DECODE_ERROR", "Failed to decode base64 data", nil)
      return
    }

    let safeFilename = (filename as NSString).lastPathComponent
    let tempDir = FileManager.default.temporaryDirectory
    let fileURL = tempDir.appendingPathComponent(safeFilename)

    do {
      try data.write(to: fileURL)
    } catch {
      reject("WRITE_ERROR", "Failed to write file: \(error.localizedDescription)", error)
      return
    }

    DispatchQueue.main.async {
      guard let rootVC = UIApplication.shared.delegate?.window??.rootViewController else {
        reject("NO_VIEW_CONTROLLER", "Could not find root view controller", nil)
        return
      }

      let presenter = rootVC.presentedViewController ?? rootVC
      let activityVC = UIActivityViewController(activityItems: [fileURL], applicationActivities: nil)

      if let popover = activityVC.popoverPresentationController {
        popover.sourceView = presenter.view
        popover.sourceRect = CGRect(x: presenter.view.bounds.midX, y: presenter.view.bounds.midY, width: 0, height: 0)
        popover.permittedArrowDirections = []
      }

      activityVC.completionWithItemsHandler = { _, _, _, _ in
        try? FileManager.default.removeItem(at: fileURL)
      }
      presenter.present(activityVC, animated: true) {
        resolve(true)
      }
    }
  }
}
