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

public extension BrowserNativeOptions {
  private typealias bridge = margelo.nitro.one.bridge.swift

  /**
   * Create a new instance of `BrowserNativeOptions`.
   */
  init(presentationStyle: BrowserPresentationStyle?, browserPackage: String?, toolbarColor: String?, secondaryToolbarColor: String?, controlsColor: String?, showTitle: Bool?, preferEphemeralSession: Bool?, colorScheme: BrowserColorScheme?) {
    self.init({ () -> bridge.std__optional_BrowserPresentationStyle_ in
      if let __unwrappedValue = presentationStyle {
        return bridge.create_std__optional_BrowserPresentationStyle_(__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_std__string_ in
      if let __unwrappedValue = toolbarColor {
        return bridge.create_std__optional_std__string_(std.string(__unwrappedValue))
      } else {
        return .init()
      }
    }(), { () -> bridge.std__optional_std__string_ in
      if let __unwrappedValue = secondaryToolbarColor {
        return bridge.create_std__optional_std__string_(std.string(__unwrappedValue))
      } else {
        return .init()
      }
    }(), { () -> bridge.std__optional_std__string_ in
      if let __unwrappedValue = controlsColor {
        return bridge.create_std__optional_std__string_(std.string(__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_bool_ in
      if let __unwrappedValue = preferEphemeralSession {
        return bridge.create_std__optional_bool_(__unwrappedValue)
      } else {
        return .init()
      }
    }(), { () -> bridge.std__optional_BrowserColorScheme_ in
      if let __unwrappedValue = colorScheme {
        return bridge.create_std__optional_BrowserColorScheme_(__unwrappedValue)
      } else {
        return .init()
      }
    }())
  }

  @inline(__always)
  var presentationStyle: BrowserPresentationStyle? {
    return self.__presentationStyle.value
  }
  
  @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 toolbarColor: String? {
    return { () -> String? in
      if bridge.has_value_std__optional_std__string_(self.__toolbarColor) {
        let __unwrapped = bridge.get_std__optional_std__string_(self.__toolbarColor)
        return String(__unwrapped)
      } else {
        return nil
      }
    }()
  }
  
  @inline(__always)
  var secondaryToolbarColor: String? {
    return { () -> String? in
      if bridge.has_value_std__optional_std__string_(self.__secondaryToolbarColor) {
        let __unwrapped = bridge.get_std__optional_std__string_(self.__secondaryToolbarColor)
        return String(__unwrapped)
      } else {
        return nil
      }
    }()
  }
  
  @inline(__always)
  var controlsColor: String? {
    return { () -> String? in
      if bridge.has_value_std__optional_std__string_(self.__controlsColor) {
        let __unwrapped = bridge.get_std__optional_std__string_(self.__controlsColor)
        return String(__unwrapped)
      } else {
        return nil
      }
    }()
  }
  
  @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 preferEphemeralSession: Bool? {
    return { () -> Bool? in
      if bridge.has_value_std__optional_bool_(self.__preferEphemeralSession) {
        let __unwrapped = bridge.get_std__optional_bool_(self.__preferEphemeralSession)
        return __unwrapped
      } else {
        return nil
      }
    }()
  }
  
  @inline(__always)
  var colorScheme: BrowserColorScheme? {
    return self.__colorScheme.value
  }
}
