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

public extension NativeLiveActivityState {
  private typealias bridge = margelo.nitro.liveactivitykit.bridge.swift

  /**
   * Create a new instance of `NativeLiveActivityState`.
   */
  init(title: String, subtitle: String?, body: String?, status: String?, progress: Double?, date: Double?, imageName: String?, tintColorHex: String?, leading: String?, trailing: String?, extra: Dictionary<String, String>) {
    self.init(std.string(title), { () -> bridge.std__optional_std__string_ in
      if let __unwrappedValue = subtitle {
        return bridge.create_std__optional_std__string_(std.string(__unwrappedValue))
      } else {
        return .init()
      }
    }(), { () -> bridge.std__optional_std__string_ in
      if let __unwrappedValue = body {
        return bridge.create_std__optional_std__string_(std.string(__unwrappedValue))
      } else {
        return .init()
      }
    }(), { () -> bridge.std__optional_std__string_ in
      if let __unwrappedValue = status {
        return bridge.create_std__optional_std__string_(std.string(__unwrappedValue))
      } else {
        return .init()
      }
    }(), { () -> bridge.std__optional_double_ in
      if let __unwrappedValue = progress {
        return bridge.create_std__optional_double_(__unwrappedValue)
      } else {
        return .init()
      }
    }(), { () -> bridge.std__optional_double_ in
      if let __unwrappedValue = date {
        return bridge.create_std__optional_double_(__unwrappedValue)
      } else {
        return .init()
      }
    }(), { () -> bridge.std__optional_std__string_ in
      if let __unwrappedValue = imageName {
        return bridge.create_std__optional_std__string_(std.string(__unwrappedValue))
      } else {
        return .init()
      }
    }(), { () -> bridge.std__optional_std__string_ in
      if let __unwrappedValue = tintColorHex {
        return bridge.create_std__optional_std__string_(std.string(__unwrappedValue))
      } else {
        return .init()
      }
    }(), { () -> bridge.std__optional_std__string_ in
      if let __unwrappedValue = leading {
        return bridge.create_std__optional_std__string_(std.string(__unwrappedValue))
      } else {
        return .init()
      }
    }(), { () -> bridge.std__optional_std__string_ in
      if let __unwrappedValue = trailing {
        return bridge.create_std__optional_std__string_(std.string(__unwrappedValue))
      } else {
        return .init()
      }
    }(), { () -> bridge.std__unordered_map_std__string__std__string_ in
      var __map = bridge.create_std__unordered_map_std__string__std__string_(extra.count)
      for (__k, __v) in extra {
        bridge.emplace_std__unordered_map_std__string__std__string_(&__map, std.string(__k), std.string(__v))
      }
      return __map
    }())
  }

  @inline(__always)
  var title: String {
    return String(self.__title)
  }
  
  @inline(__always)
  var subtitle: String? {
    return { () -> String? in
      if bridge.has_value_std__optional_std__string_(self.__subtitle) {
        let __unwrapped = bridge.get_std__optional_std__string_(self.__subtitle)
        return String(__unwrapped)
      } else {
        return nil
      }
    }()
  }
  
  @inline(__always)
  var body: String? {
    return { () -> String? in
      if bridge.has_value_std__optional_std__string_(self.__body) {
        let __unwrapped = bridge.get_std__optional_std__string_(self.__body)
        return String(__unwrapped)
      } else {
        return nil
      }
    }()
  }
  
  @inline(__always)
  var status: String? {
    return { () -> String? in
      if bridge.has_value_std__optional_std__string_(self.__status) {
        let __unwrapped = bridge.get_std__optional_std__string_(self.__status)
        return String(__unwrapped)
      } else {
        return nil
      }
    }()
  }
  
  @inline(__always)
  var progress: Double? {
    return { () -> Double? in
      if bridge.has_value_std__optional_double_(self.__progress) {
        let __unwrapped = bridge.get_std__optional_double_(self.__progress)
        return __unwrapped
      } else {
        return nil
      }
    }()
  }
  
  @inline(__always)
  var date: Double? {
    return { () -> Double? in
      if bridge.has_value_std__optional_double_(self.__date) {
        let __unwrapped = bridge.get_std__optional_double_(self.__date)
        return __unwrapped
      } else {
        return nil
      }
    }()
  }
  
  @inline(__always)
  var imageName: String? {
    return { () -> String? in
      if bridge.has_value_std__optional_std__string_(self.__imageName) {
        let __unwrapped = bridge.get_std__optional_std__string_(self.__imageName)
        return String(__unwrapped)
      } else {
        return nil
      }
    }()
  }
  
  @inline(__always)
  var tintColorHex: String? {
    return { () -> String? in
      if bridge.has_value_std__optional_std__string_(self.__tintColorHex) {
        let __unwrapped = bridge.get_std__optional_std__string_(self.__tintColorHex)
        return String(__unwrapped)
      } else {
        return nil
      }
    }()
  }
  
  @inline(__always)
  var leading: String? {
    return { () -> String? in
      if bridge.has_value_std__optional_std__string_(self.__leading) {
        let __unwrapped = bridge.get_std__optional_std__string_(self.__leading)
        return String(__unwrapped)
      } else {
        return nil
      }
    }()
  }
  
  @inline(__always)
  var trailing: String? {
    return { () -> String? in
      if bridge.has_value_std__optional_std__string_(self.__trailing) {
        let __unwrapped = bridge.get_std__optional_std__string_(self.__trailing)
        return String(__unwrapped)
      } else {
        return nil
      }
    }()
  }
  
  @inline(__always)
  var extra: Dictionary<String, String> {
    return { () -> Dictionary<String, String> in
      var __dictionary = Dictionary<String, String>(minimumCapacity: self.__extra.size())
      let __keys = bridge.get_std__unordered_map_std__string__std__string__keys(self.__extra)
      for __key in __keys {
        let __value = bridge.get_std__unordered_map_std__string__std__string__value(self.__extra, __key)
        __dictionary[String(__key)] = String(__value)
      }
      return __dictionary
    }()
  }
}
