// Copyright 2024-present 650 Industries. All rights reserved.

internal import SDWebImage

internal final class PSDCoder: NSObject, SDImageCoder {
  nonisolated(unsafe) static let shared = PSDCoder()
  
  func canDecode(from data: Data?) -> Bool {
    guard let data, data.count >= 4 else {
      return false
    }
    
    // verify PSD magic bytes
    let signatureData = data[0..<4]
    let signature = String(data: signatureData, encoding: .ascii)
    return signature == "8BPS"
  }
  
  func decodedImage(with data: Data?, options: [SDImageCoderOption : Any]? = nil) -> UIImage? {
    guard let data else {
      return nil
    }
    
    if let scale = options?[SDImageCoderOption.decodeScaleFactor] as? CGFloat {
      return UIImage(data: data, scale: scale)
    }
    
    // UIImage is able to directly handle PSD data
    return UIImage(data: data)
  }
  
  func canEncode(to format: SDImageFormat) -> Bool {
    return false
  }
  
  func encodedData(with image: UIImage?, format: SDImageFormat, options: [SDImageCoderOption : Any]? = nil) -> Data? {
    return nil
  }
}
