///
/// DomainEvent.swift
/// This file was generated by nitrogen. DO NOT MODIFY THIS FILE.
/// https://github.com/mrousavy/nitro
/// Copyright © Marc Rousavy @ Margelo
///

import NitroModules

/**
 * Represents an instance of `DomainEvent`, backed by a C++ struct.
 */
public typealias DomainEvent = margelo.nitro.aviation.DomainEvent

public extension DomainEvent {
  private typealias bridge = margelo.nitro.aviation.bridge.swift

  /**
   * Create a new instance of `DomainEvent`.
   */
  init(type: DomainEventType, queueIndex: Double?, oldState: PlaybackState?, newState: PlaybackState?, position: MediaPosition?, itemSource: ItemSource?, errorMessage: String?, errorCode: String?, rate: Double?, volume: Double?, muted: Bool?, uri: String?, bytes: Double?, layer: Double?, durationMs: Double?, source: TtffSource?, error: String?, videoBitrateBps: Double?, audioBitrateBps: Double?, adBreakIndex: Double?, adBreakTimeMs: Double?, totalAdsInBreak: Double?, adId: String?, adTitle: String?, adDurationMs: Double?, adCurrentMs: Double?, adIndexInBreak: Double?, isSkippable: Bool?, skipOffsetMs: Double?, began: Bool?, shouldResume: Bool?, resumePolicy: AviationInterruptionMode?) {
    self.init(type, { () -> bridge.std__optional_double_ in
      if let __unwrappedValue = queueIndex {
        return bridge.create_std__optional_double_(__unwrappedValue)
      } else {
        return .init()
      }
    }(), { () -> bridge.std__optional_PlaybackState_ in
      if let __unwrappedValue = oldState {
        return bridge.create_std__optional_PlaybackState_(__unwrappedValue)
      } else {
        return .init()
      }
    }(), { () -> bridge.std__optional_PlaybackState_ in
      if let __unwrappedValue = newState {
        return bridge.create_std__optional_PlaybackState_(__unwrappedValue)
      } else {
        return .init()
      }
    }(), { () -> bridge.std__optional_MediaPosition_ in
      if let __unwrappedValue = position {
        return bridge.create_std__optional_MediaPosition_(__unwrappedValue)
      } else {
        return .init()
      }
    }(), { () -> bridge.std__optional_ItemSource_ in
      if let __unwrappedValue = itemSource {
        return bridge.create_std__optional_ItemSource_(__unwrappedValue)
      } else {
        return .init()
      }
    }(), { () -> bridge.std__optional_std__string_ in
      if let __unwrappedValue = errorMessage {
        return bridge.create_std__optional_std__string_(std.string(__unwrappedValue))
      } else {
        return .init()
      }
    }(), { () -> bridge.std__optional_std__string_ in
      if let __unwrappedValue = errorCode {
        return bridge.create_std__optional_std__string_(std.string(__unwrappedValue))
      } else {
        return .init()
      }
    }(), { () -> bridge.std__optional_double_ in
      if let __unwrappedValue = rate {
        return bridge.create_std__optional_double_(__unwrappedValue)
      } else {
        return .init()
      }
    }(), { () -> bridge.std__optional_double_ in
      if let __unwrappedValue = volume {
        return bridge.create_std__optional_double_(__unwrappedValue)
      } else {
        return .init()
      }
    }(), { () -> bridge.std__optional_bool_ in
      if let __unwrappedValue = muted {
        return bridge.create_std__optional_bool_(__unwrappedValue)
      } else {
        return .init()
      }
    }(), { () -> bridge.std__optional_std__string_ in
      if let __unwrappedValue = uri {
        return bridge.create_std__optional_std__string_(std.string(__unwrappedValue))
      } else {
        return .init()
      }
    }(), { () -> bridge.std__optional_double_ in
      if let __unwrappedValue = bytes {
        return bridge.create_std__optional_double_(__unwrappedValue)
      } else {
        return .init()
      }
    }(), { () -> bridge.std__optional_double_ in
      if let __unwrappedValue = layer {
        return bridge.create_std__optional_double_(__unwrappedValue)
      } else {
        return .init()
      }
    }(), { () -> bridge.std__optional_double_ in
      if let __unwrappedValue = durationMs {
        return bridge.create_std__optional_double_(__unwrappedValue)
      } else {
        return .init()
      }
    }(), { () -> bridge.std__optional_TtffSource_ in
      if let __unwrappedValue = source {
        return bridge.create_std__optional_TtffSource_(__unwrappedValue)
      } else {
        return .init()
      }
    }(), { () -> bridge.std__optional_std__string_ in
      if let __unwrappedValue = error {
        return bridge.create_std__optional_std__string_(std.string(__unwrappedValue))
      } else {
        return .init()
      }
    }(), { () -> bridge.std__optional_double_ in
      if let __unwrappedValue = videoBitrateBps {
        return bridge.create_std__optional_double_(__unwrappedValue)
      } else {
        return .init()
      }
    }(), { () -> bridge.std__optional_double_ in
      if let __unwrappedValue = audioBitrateBps {
        return bridge.create_std__optional_double_(__unwrappedValue)
      } else {
        return .init()
      }
    }(), { () -> bridge.std__optional_double_ in
      if let __unwrappedValue = adBreakIndex {
        return bridge.create_std__optional_double_(__unwrappedValue)
      } else {
        return .init()
      }
    }(), { () -> bridge.std__optional_double_ in
      if let __unwrappedValue = adBreakTimeMs {
        return bridge.create_std__optional_double_(__unwrappedValue)
      } else {
        return .init()
      }
    }(), { () -> bridge.std__optional_double_ in
      if let __unwrappedValue = totalAdsInBreak {
        return bridge.create_std__optional_double_(__unwrappedValue)
      } else {
        return .init()
      }
    }(), { () -> bridge.std__optional_std__string_ in
      if let __unwrappedValue = adId {
        return bridge.create_std__optional_std__string_(std.string(__unwrappedValue))
      } else {
        return .init()
      }
    }(), { () -> bridge.std__optional_std__string_ in
      if let __unwrappedValue = adTitle {
        return bridge.create_std__optional_std__string_(std.string(__unwrappedValue))
      } else {
        return .init()
      }
    }(), { () -> bridge.std__optional_double_ in
      if let __unwrappedValue = adDurationMs {
        return bridge.create_std__optional_double_(__unwrappedValue)
      } else {
        return .init()
      }
    }(), { () -> bridge.std__optional_double_ in
      if let __unwrappedValue = adCurrentMs {
        return bridge.create_std__optional_double_(__unwrappedValue)
      } else {
        return .init()
      }
    }(), { () -> bridge.std__optional_double_ in
      if let __unwrappedValue = adIndexInBreak {
        return bridge.create_std__optional_double_(__unwrappedValue)
      } else {
        return .init()
      }
    }(), { () -> bridge.std__optional_bool_ in
      if let __unwrappedValue = isSkippable {
        return bridge.create_std__optional_bool_(__unwrappedValue)
      } else {
        return .init()
      }
    }(), { () -> bridge.std__optional_double_ in
      if let __unwrappedValue = skipOffsetMs {
        return bridge.create_std__optional_double_(__unwrappedValue)
      } else {
        return .init()
      }
    }(), { () -> bridge.std__optional_bool_ in
      if let __unwrappedValue = began {
        return bridge.create_std__optional_bool_(__unwrappedValue)
      } else {
        return .init()
      }
    }(), { () -> bridge.std__optional_bool_ in
      if let __unwrappedValue = shouldResume {
        return bridge.create_std__optional_bool_(__unwrappedValue)
      } else {
        return .init()
      }
    }(), { () -> bridge.std__optional_AviationInterruptionMode_ in
      if let __unwrappedValue = resumePolicy {
        return bridge.create_std__optional_AviationInterruptionMode_(__unwrappedValue)
      } else {
        return .init()
      }
    }())
  }

  @inline(__always)
  var type: DomainEventType {
    return self.__type
  }
  
  @inline(__always)
  var queueIndex: Double? {
    return { () -> Double? in
      if bridge.has_value_std__optional_double_(self.__queueIndex) {
        let __unwrapped = bridge.get_std__optional_double_(self.__queueIndex)
        return __unwrapped
      } else {
        return nil
      }
    }()
  }
  
  @inline(__always)
  var oldState: PlaybackState? {
    return self.__oldState.value
  }
  
  @inline(__always)
  var newState: PlaybackState? {
    return self.__newState.value
  }
  
  @inline(__always)
  var position: MediaPosition? {
    return self.__position.value
  }
  
  @inline(__always)
  var itemSource: ItemSource? {
    return self.__itemSource.value
  }
  
  @inline(__always)
  var errorMessage: String? {
    return { () -> String? in
      if bridge.has_value_std__optional_std__string_(self.__errorMessage) {
        let __unwrapped = bridge.get_std__optional_std__string_(self.__errorMessage)
        return String(__unwrapped)
      } else {
        return nil
      }
    }()
  }
  
  @inline(__always)
  var errorCode: String? {
    return { () -> String? in
      if bridge.has_value_std__optional_std__string_(self.__errorCode) {
        let __unwrapped = bridge.get_std__optional_std__string_(self.__errorCode)
        return String(__unwrapped)
      } else {
        return nil
      }
    }()
  }
  
  @inline(__always)
  var rate: Double? {
    return { () -> Double? in
      if bridge.has_value_std__optional_double_(self.__rate) {
        let __unwrapped = bridge.get_std__optional_double_(self.__rate)
        return __unwrapped
      } else {
        return nil
      }
    }()
  }
  
  @inline(__always)
  var volume: Double? {
    return { () -> Double? in
      if bridge.has_value_std__optional_double_(self.__volume) {
        let __unwrapped = bridge.get_std__optional_double_(self.__volume)
        return __unwrapped
      } else {
        return nil
      }
    }()
  }
  
  @inline(__always)
  var muted: Bool? {
    return { () -> Bool? in
      if bridge.has_value_std__optional_bool_(self.__muted) {
        let __unwrapped = bridge.get_std__optional_bool_(self.__muted)
        return __unwrapped
      } else {
        return nil
      }
    }()
  }
  
  @inline(__always)
  var uri: String? {
    return { () -> String? in
      if bridge.has_value_std__optional_std__string_(self.__uri) {
        let __unwrapped = bridge.get_std__optional_std__string_(self.__uri)
        return String(__unwrapped)
      } else {
        return nil
      }
    }()
  }
  
  @inline(__always)
  var bytes: Double? {
    return { () -> Double? in
      if bridge.has_value_std__optional_double_(self.__bytes) {
        let __unwrapped = bridge.get_std__optional_double_(self.__bytes)
        return __unwrapped
      } else {
        return nil
      }
    }()
  }
  
  @inline(__always)
  var layer: Double? {
    return { () -> Double? in
      if bridge.has_value_std__optional_double_(self.__layer) {
        let __unwrapped = bridge.get_std__optional_double_(self.__layer)
        return __unwrapped
      } else {
        return nil
      }
    }()
  }
  
  @inline(__always)
  var durationMs: Double? {
    return { () -> Double? in
      if bridge.has_value_std__optional_double_(self.__durationMs) {
        let __unwrapped = bridge.get_std__optional_double_(self.__durationMs)
        return __unwrapped
      } else {
        return nil
      }
    }()
  }
  
  @inline(__always)
  var source: TtffSource? {
    return self.__source.value
  }
  
  @inline(__always)
  var error: String? {
    return { () -> String? in
      if bridge.has_value_std__optional_std__string_(self.__error) {
        let __unwrapped = bridge.get_std__optional_std__string_(self.__error)
        return String(__unwrapped)
      } else {
        return nil
      }
    }()
  }
  
  @inline(__always)
  var videoBitrateBps: Double? {
    return { () -> Double? in
      if bridge.has_value_std__optional_double_(self.__videoBitrateBps) {
        let __unwrapped = bridge.get_std__optional_double_(self.__videoBitrateBps)
        return __unwrapped
      } else {
        return nil
      }
    }()
  }
  
  @inline(__always)
  var audioBitrateBps: Double? {
    return { () -> Double? in
      if bridge.has_value_std__optional_double_(self.__audioBitrateBps) {
        let __unwrapped = bridge.get_std__optional_double_(self.__audioBitrateBps)
        return __unwrapped
      } else {
        return nil
      }
    }()
  }
  
  @inline(__always)
  var adBreakIndex: Double? {
    return { () -> Double? in
      if bridge.has_value_std__optional_double_(self.__adBreakIndex) {
        let __unwrapped = bridge.get_std__optional_double_(self.__adBreakIndex)
        return __unwrapped
      } else {
        return nil
      }
    }()
  }
  
  @inline(__always)
  var adBreakTimeMs: Double? {
    return { () -> Double? in
      if bridge.has_value_std__optional_double_(self.__adBreakTimeMs) {
        let __unwrapped = bridge.get_std__optional_double_(self.__adBreakTimeMs)
        return __unwrapped
      } else {
        return nil
      }
    }()
  }
  
  @inline(__always)
  var totalAdsInBreak: Double? {
    return { () -> Double? in
      if bridge.has_value_std__optional_double_(self.__totalAdsInBreak) {
        let __unwrapped = bridge.get_std__optional_double_(self.__totalAdsInBreak)
        return __unwrapped
      } else {
        return nil
      }
    }()
  }
  
  @inline(__always)
  var adId: String? {
    return { () -> String? in
      if bridge.has_value_std__optional_std__string_(self.__adId) {
        let __unwrapped = bridge.get_std__optional_std__string_(self.__adId)
        return String(__unwrapped)
      } else {
        return nil
      }
    }()
  }
  
  @inline(__always)
  var adTitle: String? {
    return { () -> String? in
      if bridge.has_value_std__optional_std__string_(self.__adTitle) {
        let __unwrapped = bridge.get_std__optional_std__string_(self.__adTitle)
        return String(__unwrapped)
      } else {
        return nil
      }
    }()
  }
  
  @inline(__always)
  var adDurationMs: Double? {
    return { () -> Double? in
      if bridge.has_value_std__optional_double_(self.__adDurationMs) {
        let __unwrapped = bridge.get_std__optional_double_(self.__adDurationMs)
        return __unwrapped
      } else {
        return nil
      }
    }()
  }
  
  @inline(__always)
  var adCurrentMs: Double? {
    return { () -> Double? in
      if bridge.has_value_std__optional_double_(self.__adCurrentMs) {
        let __unwrapped = bridge.get_std__optional_double_(self.__adCurrentMs)
        return __unwrapped
      } else {
        return nil
      }
    }()
  }
  
  @inline(__always)
  var adIndexInBreak: Double? {
    return { () -> Double? in
      if bridge.has_value_std__optional_double_(self.__adIndexInBreak) {
        let __unwrapped = bridge.get_std__optional_double_(self.__adIndexInBreak)
        return __unwrapped
      } else {
        return nil
      }
    }()
  }
  
  @inline(__always)
  var isSkippable: Bool? {
    return { () -> Bool? in
      if bridge.has_value_std__optional_bool_(self.__isSkippable) {
        let __unwrapped = bridge.get_std__optional_bool_(self.__isSkippable)
        return __unwrapped
      } else {
        return nil
      }
    }()
  }
  
  @inline(__always)
  var skipOffsetMs: Double? {
    return { () -> Double? in
      if bridge.has_value_std__optional_double_(self.__skipOffsetMs) {
        let __unwrapped = bridge.get_std__optional_double_(self.__skipOffsetMs)
        return __unwrapped
      } else {
        return nil
      }
    }()
  }
  
  @inline(__always)
  var began: Bool? {
    return { () -> Bool? in
      if bridge.has_value_std__optional_bool_(self.__began) {
        let __unwrapped = bridge.get_std__optional_bool_(self.__began)
        return __unwrapped
      } else {
        return nil
      }
    }()
  }
  
  @inline(__always)
  var shouldResume: Bool? {
    return { () -> Bool? in
      if bridge.has_value_std__optional_bool_(self.__shouldResume) {
        let __unwrapped = bridge.get_std__optional_bool_(self.__shouldResume)
        return __unwrapped
      } else {
        return nil
      }
    }()
  }
  
  @inline(__always)
  var resumePolicy: AviationInterruptionMode? {
    return self.__resumePolicy.value
  }
}
