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

extension TransportAsset {
  private typealias bridge = margelo.nitro.rncandle.bridge.swift

  /**
   * Create a new instance of `TransportAsset`.
   */
  public init(
    assetKind: String, serviceTradeID: String, serviceAssetID: String, serviceAccountID: String,
    name: String, description: String, imageURL: String, originCoordinates: Coordinates,
    originAddress: Address, destinationCoordinates: Coordinates, destinationAddress: Address,
    seats: Double, departureDateTime: String, arrivalDateTime: String, linkedAccountID: String,
    service: Service
  ) {
    self.init(
      std.string(assetKind), std.string(serviceTradeID), std.string(serviceAssetID),
      std.string(serviceAccountID), std.string(name), std.string(description), std.string(imageURL),
      originCoordinates, originAddress, destinationCoordinates, destinationAddress, seats,
      std.string(departureDateTime), std.string(arrivalDateTime), std.string(linkedAccountID),
      service)
  }

  public var assetKind: String {
    @inline(__always)
    get {
      return String(self.__assetKind)
    }
    @inline(__always)
    set {
      self.__assetKind = std.string(newValue)
    }
  }

  public var serviceTradeID: String {
    @inline(__always)
    get {
      return String(self.__serviceTradeID)
    }
    @inline(__always)
    set {
      self.__serviceTradeID = std.string(newValue)
    }
  }

  public var serviceAssetID: String {
    @inline(__always)
    get {
      return String(self.__serviceAssetID)
    }
    @inline(__always)
    set {
      self.__serviceAssetID = std.string(newValue)
    }
  }

  public var serviceAccountID: String {
    @inline(__always)
    get {
      return String(self.__serviceAccountID)
    }
    @inline(__always)
    set {
      self.__serviceAccountID = std.string(newValue)
    }
  }

  public var name: String {
    @inline(__always)
    get {
      return String(self.__name)
    }
    @inline(__always)
    set {
      self.__name = std.string(newValue)
    }
  }

  public var description: String {
    @inline(__always)
    get {
      return String(self.__description)
    }
    @inline(__always)
    set {
      self.__description = std.string(newValue)
    }
  }

  public var imageURL: String {
    @inline(__always)
    get {
      return String(self.__imageURL)
    }
    @inline(__always)
    set {
      self.__imageURL = std.string(newValue)
    }
  }

  public var originCoordinates: Coordinates {
    @inline(__always)
    get {
      return self.__originCoordinates
    }
    @inline(__always)
    set {
      self.__originCoordinates = newValue
    }
  }

  public var originAddress: Address {
    @inline(__always)
    get {
      return self.__originAddress
    }
    @inline(__always)
    set {
      self.__originAddress = newValue
    }
  }

  public var destinationCoordinates: Coordinates {
    @inline(__always)
    get {
      return self.__destinationCoordinates
    }
    @inline(__always)
    set {
      self.__destinationCoordinates = newValue
    }
  }

  public var destinationAddress: Address {
    @inline(__always)
    get {
      return self.__destinationAddress
    }
    @inline(__always)
    set {
      self.__destinationAddress = newValue
    }
  }

  public var seats: Double {
    @inline(__always)
    get {
      return self.__seats
    }
    @inline(__always)
    set {
      self.__seats = newValue
    }
  }

  public var departureDateTime: String {
    @inline(__always)
    get {
      return String(self.__departureDateTime)
    }
    @inline(__always)
    set {
      self.__departureDateTime = std.string(newValue)
    }
  }

  public var arrivalDateTime: String {
    @inline(__always)
    get {
      return String(self.__arrivalDateTime)
    }
    @inline(__always)
    set {
      self.__arrivalDateTime = std.string(newValue)
    }
  }

  public var linkedAccountID: String {
    @inline(__always)
    get {
      return String(self.__linkedAccountID)
    }
    @inline(__always)
    set {
      self.__linkedAccountID = std.string(newValue)
    }
  }

  public var service: Service {
    @inline(__always)
    get {
      return self.__service
    }
    @inline(__always)
    set {
      self.__service = newValue
    }
  }
}
