///
/// InAppBrowserOptions.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 `InAppBrowserOptions`, backed by a C++ struct.
 */
public typealias InAppBrowserOptions = margelo.nitro.inappbrowsernitro.InAppBrowserOptions

public extension InAppBrowserOptions {
  private typealias bridge = margelo.nitro.inappbrowsernitro.bridge.swift

  /**
   * Create a new instance of `InAppBrowserOptions`.
   */
  init(dismissButtonStyle: DismissButtonStyle?, preferredBarTintColor: DynamicColor?, preferredControlTintColor: DynamicColor?, preferredStatusBarStyle: StatusBarStyle?, readerMode: Bool?, animated: Bool?, modalPresentationStyle: ModalPresentationStyle?, modalTransitionStyle: ModalTransitionStyle?, modalEnabled: Bool?, enableBarCollapsing: Bool?, ephemeralWebSession: Bool?, enableEdgeDismiss: Bool?, overrideUserInterfaceStyle: UserInterfaceStyle?, formSheetPreferredContentSize: FormSheetContentSize?, showTitle: Bool?, toolbarColor: DynamicColor?, secondaryToolbarColor: DynamicColor?, navigationBarColor: DynamicColor?, navigationBarDividerColor: DynamicColor?, enableUrlBarHiding: Bool?, enableDefaultShare: Bool?, shareState: BrowserShareState?, colorScheme: BrowserColorScheme?, headers: Dictionary<String, String>?, forceCloseOnRedirection: Bool?, hasBackButton: Bool?, browserPackage: String?, showInRecents: Bool?, includeReferrer: Bool?, instantAppsEnabled: Bool?, enablePullToRefresh: Bool?, enablePartialCustomTab: Bool?, animations: BrowserAnimations?) {
    self.init({ () -> bridge.std__optional_DismissButtonStyle_ in
      if let __unwrappedValue = dismissButtonStyle {
        return bridge.create_std__optional_DismissButtonStyle_(__unwrappedValue)
      } else {
        return .init()
      }
    }(), { () -> bridge.std__optional_DynamicColor_ in
      if let __unwrappedValue = preferredBarTintColor {
        return bridge.create_std__optional_DynamicColor_(__unwrappedValue)
      } else {
        return .init()
      }
    }(), { () -> bridge.std__optional_DynamicColor_ in
      if let __unwrappedValue = preferredControlTintColor {
        return bridge.create_std__optional_DynamicColor_(__unwrappedValue)
      } else {
        return .init()
      }
    }(), { () -> bridge.std__optional_StatusBarStyle_ in
      if let __unwrappedValue = preferredStatusBarStyle {
        return bridge.create_std__optional_StatusBarStyle_(__unwrappedValue)
      } else {
        return .init()
      }
    }(), { () -> bridge.std__optional_bool_ in
      if let __unwrappedValue = readerMode {
        return bridge.create_std__optional_bool_(__unwrappedValue)
      } else {
        return .init()
      }
    }(), { () -> bridge.std__optional_bool_ in
      if let __unwrappedValue = animated {
        return bridge.create_std__optional_bool_(__unwrappedValue)
      } else {
        return .init()
      }
    }(), { () -> bridge.std__optional_ModalPresentationStyle_ in
      if let __unwrappedValue = modalPresentationStyle {
        return bridge.create_std__optional_ModalPresentationStyle_(__unwrappedValue)
      } else {
        return .init()
      }
    }(), { () -> bridge.std__optional_ModalTransitionStyle_ in
      if let __unwrappedValue = modalTransitionStyle {
        return bridge.create_std__optional_ModalTransitionStyle_(__unwrappedValue)
      } else {
        return .init()
      }
    }(), { () -> bridge.std__optional_bool_ in
      if let __unwrappedValue = modalEnabled {
        return bridge.create_std__optional_bool_(__unwrappedValue)
      } else {
        return .init()
      }
    }(), { () -> bridge.std__optional_bool_ in
      if let __unwrappedValue = enableBarCollapsing {
        return bridge.create_std__optional_bool_(__unwrappedValue)
      } else {
        return .init()
      }
    }(), { () -> bridge.std__optional_bool_ in
      if let __unwrappedValue = ephemeralWebSession {
        return bridge.create_std__optional_bool_(__unwrappedValue)
      } else {
        return .init()
      }
    }(), { () -> bridge.std__optional_bool_ in
      if let __unwrappedValue = enableEdgeDismiss {
        return bridge.create_std__optional_bool_(__unwrappedValue)
      } else {
        return .init()
      }
    }(), { () -> bridge.std__optional_UserInterfaceStyle_ in
      if let __unwrappedValue = overrideUserInterfaceStyle {
        return bridge.create_std__optional_UserInterfaceStyle_(__unwrappedValue)
      } else {
        return .init()
      }
    }(), { () -> bridge.std__optional_FormSheetContentSize_ in
      if let __unwrappedValue = formSheetPreferredContentSize {
        return bridge.create_std__optional_FormSheetContentSize_(__unwrappedValue)
      } else {
        return .init()
      }
    }(), { () -> bridge.std__optional_bool_ in
      if let __unwrappedValue = showTitle {
        return bridge.create_std__optional_bool_(__unwrappedValue)
      } else {
        return .init()
      }
    }(), { () -> bridge.std__optional_DynamicColor_ in
      if let __unwrappedValue = toolbarColor {
        return bridge.create_std__optional_DynamicColor_(__unwrappedValue)
      } else {
        return .init()
      }
    }(), { () -> bridge.std__optional_DynamicColor_ in
      if let __unwrappedValue = secondaryToolbarColor {
        return bridge.create_std__optional_DynamicColor_(__unwrappedValue)
      } else {
        return .init()
      }
    }(), { () -> bridge.std__optional_DynamicColor_ in
      if let __unwrappedValue = navigationBarColor {
        return bridge.create_std__optional_DynamicColor_(__unwrappedValue)
      } else {
        return .init()
      }
    }(), { () -> bridge.std__optional_DynamicColor_ in
      if let __unwrappedValue = navigationBarDividerColor {
        return bridge.create_std__optional_DynamicColor_(__unwrappedValue)
      } else {
        return .init()
      }
    }(), { () -> bridge.std__optional_bool_ in
      if let __unwrappedValue = enableUrlBarHiding {
        return bridge.create_std__optional_bool_(__unwrappedValue)
      } else {
        return .init()
      }
    }(), { () -> bridge.std__optional_bool_ in
      if let __unwrappedValue = enableDefaultShare {
        return bridge.create_std__optional_bool_(__unwrappedValue)
      } else {
        return .init()
      }
    }(), { () -> bridge.std__optional_BrowserShareState_ in
      if let __unwrappedValue = shareState {
        return bridge.create_std__optional_BrowserShareState_(__unwrappedValue)
      } else {
        return .init()
      }
    }(), { () -> bridge.std__optional_BrowserColorScheme_ in
      if let __unwrappedValue = colorScheme {
        return bridge.create_std__optional_BrowserColorScheme_(__unwrappedValue)
      } else {
        return .init()
      }
    }(), { () -> bridge.std__optional_std__unordered_map_std__string__std__string__ in
      if let __unwrappedValue = headers {
        return bridge.create_std__optional_std__unordered_map_std__string__std__string__({ () -> bridge.std__unordered_map_std__string__std__string_ in
          var __map = bridge.create_std__unordered_map_std__string__std__string_(__unwrappedValue.count)
          for (__k, __v) in __unwrappedValue {
            bridge.emplace_std__unordered_map_std__string__std__string_(&__map, std.string(__k), std.string(__v))
          }
          return __map
        }())
      } else {
        return .init()
      }
    }(), { () -> bridge.std__optional_bool_ in
      if let __unwrappedValue = forceCloseOnRedirection {
        return bridge.create_std__optional_bool_(__unwrappedValue)
      } else {
        return .init()
      }
    }(), { () -> bridge.std__optional_bool_ in
      if let __unwrappedValue = hasBackButton {
        return bridge.create_std__optional_bool_(__unwrappedValue)
      } else {
        return .init()
      }
    }(), { () -> bridge.std__optional_std__string_ in
      if let __unwrappedValue = browserPackage {
        return bridge.create_std__optional_std__string_(std.string(__unwrappedValue))
      } else {
        return .init()
      }
    }(), { () -> bridge.std__optional_bool_ in
      if let __unwrappedValue = showInRecents {
        return bridge.create_std__optional_bool_(__unwrappedValue)
      } else {
        return .init()
      }
    }(), { () -> bridge.std__optional_bool_ in
      if let __unwrappedValue = includeReferrer {
        return bridge.create_std__optional_bool_(__unwrappedValue)
      } else {
        return .init()
      }
    }(), { () -> bridge.std__optional_bool_ in
      if let __unwrappedValue = instantAppsEnabled {
        return bridge.create_std__optional_bool_(__unwrappedValue)
      } else {
        return .init()
      }
    }(), { () -> bridge.std__optional_bool_ in
      if let __unwrappedValue = enablePullToRefresh {
        return bridge.create_std__optional_bool_(__unwrappedValue)
      } else {
        return .init()
      }
    }(), { () -> bridge.std__optional_bool_ in
      if let __unwrappedValue = enablePartialCustomTab {
        return bridge.create_std__optional_bool_(__unwrappedValue)
      } else {
        return .init()
      }
    }(), { () -> bridge.std__optional_BrowserAnimations_ in
      if let __unwrappedValue = animations {
        return bridge.create_std__optional_BrowserAnimations_(__unwrappedValue)
      } else {
        return .init()
      }
    }())
  }

  @inline(__always)
  var dismissButtonStyle: DismissButtonStyle? {
    return self.__dismissButtonStyle.value
  }
  
  @inline(__always)
  var preferredBarTintColor: DynamicColor? {
    return self.__preferredBarTintColor.value
  }
  
  @inline(__always)
  var preferredControlTintColor: DynamicColor? {
    return self.__preferredControlTintColor.value
  }
  
  @inline(__always)
  var preferredStatusBarStyle: StatusBarStyle? {
    return self.__preferredStatusBarStyle.value
  }
  
  @inline(__always)
  var readerMode: Bool? {
    return { () -> Bool? in
      if bridge.has_value_std__optional_bool_(self.__readerMode) {
        let __unwrapped = bridge.get_std__optional_bool_(self.__readerMode)
        return __unwrapped
      } else {
        return nil
      }
    }()
  }
  
  @inline(__always)
  var animated: Bool? {
    return { () -> Bool? in
      if bridge.has_value_std__optional_bool_(self.__animated) {
        let __unwrapped = bridge.get_std__optional_bool_(self.__animated)
        return __unwrapped
      } else {
        return nil
      }
    }()
  }
  
  @inline(__always)
  var modalPresentationStyle: ModalPresentationStyle? {
    return self.__modalPresentationStyle.value
  }
  
  @inline(__always)
  var modalTransitionStyle: ModalTransitionStyle? {
    return self.__modalTransitionStyle.value
  }
  
  @inline(__always)
  var modalEnabled: Bool? {
    return { () -> Bool? in
      if bridge.has_value_std__optional_bool_(self.__modalEnabled) {
        let __unwrapped = bridge.get_std__optional_bool_(self.__modalEnabled)
        return __unwrapped
      } else {
        return nil
      }
    }()
  }
  
  @inline(__always)
  var enableBarCollapsing: Bool? {
    return { () -> Bool? in
      if bridge.has_value_std__optional_bool_(self.__enableBarCollapsing) {
        let __unwrapped = bridge.get_std__optional_bool_(self.__enableBarCollapsing)
        return __unwrapped
      } else {
        return nil
      }
    }()
  }
  
  @inline(__always)
  var ephemeralWebSession: Bool? {
    return { () -> Bool? in
      if bridge.has_value_std__optional_bool_(self.__ephemeralWebSession) {
        let __unwrapped = bridge.get_std__optional_bool_(self.__ephemeralWebSession)
        return __unwrapped
      } else {
        return nil
      }
    }()
  }
  
  @inline(__always)
  var enableEdgeDismiss: Bool? {
    return { () -> Bool? in
      if bridge.has_value_std__optional_bool_(self.__enableEdgeDismiss) {
        let __unwrapped = bridge.get_std__optional_bool_(self.__enableEdgeDismiss)
        return __unwrapped
      } else {
        return nil
      }
    }()
  }
  
  @inline(__always)
  var overrideUserInterfaceStyle: UserInterfaceStyle? {
    return self.__overrideUserInterfaceStyle.value
  }
  
  @inline(__always)
  var formSheetPreferredContentSize: FormSheetContentSize? {
    return self.__formSheetPreferredContentSize.value
  }
  
  @inline(__always)
  var showTitle: Bool? {
    return { () -> Bool? in
      if bridge.has_value_std__optional_bool_(self.__showTitle) {
        let __unwrapped = bridge.get_std__optional_bool_(self.__showTitle)
        return __unwrapped
      } else {
        return nil
      }
    }()
  }
  
  @inline(__always)
  var toolbarColor: DynamicColor? {
    return self.__toolbarColor.value
  }
  
  @inline(__always)
  var secondaryToolbarColor: DynamicColor? {
    return self.__secondaryToolbarColor.value
  }
  
  @inline(__always)
  var navigationBarColor: DynamicColor? {
    return self.__navigationBarColor.value
  }
  
  @inline(__always)
  var navigationBarDividerColor: DynamicColor? {
    return self.__navigationBarDividerColor.value
  }
  
  @inline(__always)
  var enableUrlBarHiding: Bool? {
    return { () -> Bool? in
      if bridge.has_value_std__optional_bool_(self.__enableUrlBarHiding) {
        let __unwrapped = bridge.get_std__optional_bool_(self.__enableUrlBarHiding)
        return __unwrapped
      } else {
        return nil
      }
    }()
  }
  
  @inline(__always)
  var enableDefaultShare: Bool? {
    return { () -> Bool? in
      if bridge.has_value_std__optional_bool_(self.__enableDefaultShare) {
        let __unwrapped = bridge.get_std__optional_bool_(self.__enableDefaultShare)
        return __unwrapped
      } else {
        return nil
      }
    }()
  }
  
  @inline(__always)
  var shareState: BrowserShareState? {
    return self.__shareState.value
  }
  
  @inline(__always)
  var colorScheme: BrowserColorScheme? {
    return self.__colorScheme.value
  }
  
  @inline(__always)
  var headers: Dictionary<String, String>? {
    return { () -> Dictionary<String, String>? in
      if bridge.has_value_std__optional_std__unordered_map_std__string__std__string__(self.__headers) {
        let __unwrapped = bridge.get_std__optional_std__unordered_map_std__string__std__string__(self.__headers)
        return { () -> Dictionary<String, String> in
          var __dictionary = Dictionary<String, String>(minimumCapacity: __unwrapped.size())
          let __keys = bridge.get_std__unordered_map_std__string__std__string__keys(__unwrapped)
          for __key in __keys {
            let __value = bridge.get_std__unordered_map_std__string__std__string__value(__unwrapped, __key)
            __dictionary[String(__key)] = String(__value)
          }
          return __dictionary
        }()
      } else {
        return nil
      }
    }()
  }
  
  @inline(__always)
  var forceCloseOnRedirection: Bool? {
    return { () -> Bool? in
      if bridge.has_value_std__optional_bool_(self.__forceCloseOnRedirection) {
        let __unwrapped = bridge.get_std__optional_bool_(self.__forceCloseOnRedirection)
        return __unwrapped
      } else {
        return nil
      }
    }()
  }
  
  @inline(__always)
  var hasBackButton: Bool? {
    return { () -> Bool? in
      if bridge.has_value_std__optional_bool_(self.__hasBackButton) {
        let __unwrapped = bridge.get_std__optional_bool_(self.__hasBackButton)
        return __unwrapped
      } else {
        return nil
      }
    }()
  }
  
  @inline(__always)
  var browserPackage: String? {
    return { () -> String? in
      if bridge.has_value_std__optional_std__string_(self.__browserPackage) {
        let __unwrapped = bridge.get_std__optional_std__string_(self.__browserPackage)
        return String(__unwrapped)
      } else {
        return nil
      }
    }()
  }
  
  @inline(__always)
  var showInRecents: Bool? {
    return { () -> Bool? in
      if bridge.has_value_std__optional_bool_(self.__showInRecents) {
        let __unwrapped = bridge.get_std__optional_bool_(self.__showInRecents)
        return __unwrapped
      } else {
        return nil
      }
    }()
  }
  
  @inline(__always)
  var includeReferrer: Bool? {
    return { () -> Bool? in
      if bridge.has_value_std__optional_bool_(self.__includeReferrer) {
        let __unwrapped = bridge.get_std__optional_bool_(self.__includeReferrer)
        return __unwrapped
      } else {
        return nil
      }
    }()
  }
  
  @inline(__always)
  var instantAppsEnabled: Bool? {
    return { () -> Bool? in
      if bridge.has_value_std__optional_bool_(self.__instantAppsEnabled) {
        let __unwrapped = bridge.get_std__optional_bool_(self.__instantAppsEnabled)
        return __unwrapped
      } else {
        return nil
      }
    }()
  }
  
  @inline(__always)
  var enablePullToRefresh: Bool? {
    return { () -> Bool? in
      if bridge.has_value_std__optional_bool_(self.__enablePullToRefresh) {
        let __unwrapped = bridge.get_std__optional_bool_(self.__enablePullToRefresh)
        return __unwrapped
      } else {
        return nil
      }
    }()
  }
  
  @inline(__always)
  var enablePartialCustomTab: Bool? {
    return { () -> Bool? in
      if bridge.has_value_std__optional_bool_(self.__enablePartialCustomTab) {
        let __unwrapped = bridge.get_std__optional_bool_(self.__enablePartialCustomTab)
        return __unwrapped
      } else {
        return nil
      }
    }()
  }
  
  @inline(__always)
  var animations: BrowserAnimations? {
    return self.__animations.value
  }
}
