// UNAppInfoModule.swift

import Foundation

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

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

  @objc func getAppName(_ resolve: @escaping RCTPromiseResolveBlock, rejecter reject: @escaping RCTPromiseRejectBlock) {
    if let bundleName = Bundle.main.displayName {
      resolve(bundleName)
    }
    else if let bundleName = Bundle.main.bundleName {
      resolve(bundleName)
    } else {
      reject("ERROR", "Could not get bundle name", nil)
    }
  }

  @objc func getVersion(_ resolve: @escaping RCTPromiseResolveBlock, rejecter reject: @escaping RCTPromiseRejectBlock) {
    if let shortVersion = Bundle.main.shortVersion {
      resolve(shortVersion)
    } else {
      resolve("unknown")
    }
  }

  @objc func getBuildNumber(_ resolve: @escaping RCTPromiseResolveBlock, rejecter reject: @escaping RCTPromiseRejectBlock) {
    if let buildNumber = Bundle.main.buildNumber {
      resolve(buildNumber)
    } else {
      resolve("unknown")
    }
  }

  @objc func getAppIdentifier(_ resolve: @escaping RCTPromiseResolveBlock, rejecter reject: @escaping RCTPromiseRejectBlock) {
    if let bundleIdentifier = Bundle.main.bundleIdentifier {
      resolve(bundleIdentifier)
    } else {
      resolve("unknown")
    }
  }

  @objc func readFontFileAsBase64(_ fileName: String, resolve: @escaping RCTPromiseResolveBlock, rejecter reject: @escaping RCTPromiseRejectBlock) {
    let name = (fileName as NSString).deletingPathExtension
    let ext = (fileName as NSString).pathExtension

    guard let path = Bundle.main.path(forResource: name, ofType: ext) else {
      reject("FILE_NOT_FOUND", "Font file not found in bundle: \(fileName)", nil)
      return
    }

    guard let data = FileManager.default.contents(atPath: path) else {
      reject("READ_ERROR", "Could not read font file: \(fileName)", nil)
      return
    }

    resolve(data.base64EncodedString())
  }
}
