//
//  AVCaptureDevice.Format+isBetterThan.swift
//  Cuvent
//
//  Created by Marc Rousavy on 19.12.20.
//  Copyright © 2020 Facebook. All rights reserved.
//

import AVFoundation

extension AVCaptureDevice.Format {
  /** Compares the current Format to the given format and returns true if the current format has either:
   * 1. Higher still image capture dimensions
   * 2. Higher video format dimensions (iOS 13.0)
   * 3. Higher FPS
   */
  func isBetterThan(_ other: AVCaptureDevice.Format) -> Bool {
    // compare still image dimensions
    let leftDimensions = highResolutionStillImageDimensions
    let rightDimensions = other.highResolutionStillImageDimensions
    if leftDimensions.height * leftDimensions.width > rightDimensions.height * rightDimensions.width
    {
      return true
    }

    if #available(iOS 13.0, *) {
      // compare video dimensions
      let leftVideo = self.formatDescription.presentationDimensions()
      let rightVideo = other.formatDescription.presentationDimensions()
      if leftVideo.height * leftVideo.width > rightVideo.height * rightVideo.width
      {
        return true
      }
    }

    // compare max fps
    if let leftMaxFps = videoSupportedFrameRateRanges.max(by: { $0.maxFrameRate > $1.maxFrameRate }),
       let rightMaxFps = other.videoSupportedFrameRateRanges.max(by: { $0.maxFrameRate > $1.maxFrameRate })
    {
      if leftMaxFps.maxFrameRate > rightMaxFps.maxFrameRate {
        return true
      }
    }

    return false
  }
}