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

import NitroModules

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

public extension LDP_ConfigParams {
  private typealias bridge = margelo.nitro.lunardatepicker.bridge.swift

  /**
   * Create a new instance of `LDP_ConfigParams`.
   */
  init(themes: Dictionary<String, LDP_CustomStyle>, languages: Dictionary<String, LDP_CustomLanguage>, yearRangeOffset: Double, timeZoneOffset: Double, monthVisibleDebounceDelaySeconds: Double?) {
    self.init({ () -> bridge.std__unordered_map_std__string__LDP_CustomStyle_ in
      var __map = bridge.create_std__unordered_map_std__string__LDP_CustomStyle_(themes.count)
      for (__k, __v) in themes {
        bridge.emplace_std__unordered_map_std__string__LDP_CustomStyle_(&__map, std.string(__k), __v)
      }
      return __map
    }(), { () -> bridge.std__unordered_map_std__string__LDP_CustomLanguage_ in
      var __map = bridge.create_std__unordered_map_std__string__LDP_CustomLanguage_(languages.count)
      for (__k, __v) in languages {
        bridge.emplace_std__unordered_map_std__string__LDP_CustomLanguage_(&__map, std.string(__k), __v)
      }
      return __map
    }(), yearRangeOffset, timeZoneOffset, { () -> bridge.std__optional_double_ in
      if let __unwrappedValue = monthVisibleDebounceDelaySeconds {
        return bridge.create_std__optional_double_(__unwrappedValue)
      } else {
        return .init()
      }
    }())
  }

  var themes: Dictionary<String, LDP_CustomStyle> {
    @inline(__always)
    get {
      return { () -> Dictionary<String, LDP_CustomStyle> in
        var __dictionary = Dictionary<String, LDP_CustomStyle>(minimumCapacity: self.__themes.size())
        let __keys = bridge.get_std__unordered_map_std__string__LDP_CustomStyle__keys(self.__themes)
        for __key in __keys {
          let __value = self.__themes[__key]!
          __dictionary[String(__key)] = __value
        }
        return __dictionary
      }()
    }
    @inline(__always)
    set {
      self.__themes = { () -> bridge.std__unordered_map_std__string__LDP_CustomStyle_ in
        var __map = bridge.create_std__unordered_map_std__string__LDP_CustomStyle_(newValue.count)
        for (__k, __v) in newValue {
          bridge.emplace_std__unordered_map_std__string__LDP_CustomStyle_(&__map, std.string(__k), __v)
        }
        return __map
      }()
    }
  }
  
  var languages: Dictionary<String, LDP_CustomLanguage> {
    @inline(__always)
    get {
      return { () -> Dictionary<String, LDP_CustomLanguage> in
        var __dictionary = Dictionary<String, LDP_CustomLanguage>(minimumCapacity: self.__languages.size())
        let __keys = bridge.get_std__unordered_map_std__string__LDP_CustomLanguage__keys(self.__languages)
        for __key in __keys {
          let __value = self.__languages[__key]!
          __dictionary[String(__key)] = __value
        }
        return __dictionary
      }()
    }
    @inline(__always)
    set {
      self.__languages = { () -> bridge.std__unordered_map_std__string__LDP_CustomLanguage_ in
        var __map = bridge.create_std__unordered_map_std__string__LDP_CustomLanguage_(newValue.count)
        for (__k, __v) in newValue {
          bridge.emplace_std__unordered_map_std__string__LDP_CustomLanguage_(&__map, std.string(__k), __v)
        }
        return __map
      }()
    }
  }
  
  var yearRangeOffset: Double {
    @inline(__always)
    get {
      return self.__yearRangeOffset
    }
    @inline(__always)
    set {
      self.__yearRangeOffset = newValue
    }
  }
  
  var timeZoneOffset: Double {
    @inline(__always)
    get {
      return self.__timeZoneOffset
    }
    @inline(__always)
    set {
      self.__timeZoneOffset = newValue
    }
  }
  
  var monthVisibleDebounceDelaySeconds: Double? {
    @inline(__always)
    get {
      return self.__monthVisibleDebounceDelaySeconds.value
    }
    @inline(__always)
    set {
      self.__monthVisibleDebounceDelaySeconds = { () -> bridge.std__optional_double_ in
        if let __unwrappedValue = newValue {
          return bridge.create_std__optional_double_(__unwrappedValue)
        } else {
          return .init()
        }
      }()
    }
  }
}
