/* Options:
Date: 2025-05-27 19:18:36
SwiftVersion: 5.0
Version: 8.40
Tip: To override a DTO option, remove "//" prefix before updating
BaseUrl: https://active-ewebservice.biz/aeservices30/api

//BaseClass: 
//AddModelExtensions: True
//AddServiceStackTypes: True
IncludeTypes: SecurityItemsRequest.*
//ExcludeTypes: 
//ExcludeGenericBaseTypes: False
//AddResponseStatus: False
//AddImplicitVersion: 
//AddDescriptionAsComments: True
//InitializeCollections: True
//TreatTypesAsStrings: 
//DefaultImports: Foundation,ServiceStack
*/

import Foundation
import ServiceStack

/**
* SecurityItemsRequires active-e Service.
*/
// @Route("/SecurityItems", "GET")
// @DataContract
public class SecurityItemsRequest : BaseSecureRequest, IReturn
{
    public typealias Return = SecurityItemsResponse

    /**
    * Can be ALL to return all security items, HAS to return all items the logged in user has permissions for, or LACKS to return all items the logged in user lacks permissons for. Defaults to HAS if not sent.
    */
    // @DataMember
    // @ApiMember(DataType="string", Description="Can be ALL to return all security items, HAS to return all items the logged in user has permissions for, or LACKS to return all items the logged in user lacks permissons for. Defaults to HAS if not sent.", Name="Mode")
    public var mode:String

    required public init(){ super.init() }

    private enum CodingKeys : String, CodingKey {
        case mode
    }

    required public init(from decoder: Decoder) throws {
        try super.init(from: decoder)
        let container = try decoder.container(keyedBy: CodingKeys.self)
        mode = try container.decodeIfPresent(String.self, forKey: .mode)
    }

    public override func encode(to encoder: Encoder) throws {
        try super.encode(to: encoder)
        var container = encoder.container(keyedBy: CodingKeys.self)
        if mode != nil { try container.encode(mode, forKey: .mode) }
    }
}

// @DataContract
public class SecurityItemsResponse : BaseResponse
{
    // @DataMember
    public var items:[SecurityItemInfo] = []

    required public init(){ super.init() }

    private enum CodingKeys : String, CodingKey {
        case items
    }

    required public init(from decoder: Decoder) throws {
        try super.init(from: decoder)
        let container = try decoder.container(keyedBy: CodingKeys.self)
        items = try container.decodeIfPresent([SecurityItemInfo].self, forKey: .items) ?? []
    }

    public override func encode(to encoder: Encoder) throws {
        try super.encode(to: encoder)
        var container = encoder.container(keyedBy: CodingKeys.self)
        if items.count > 0 { try container.encode(items, forKey: .items) }
    }
}

// @DataContract
public class BaseRequest : Codable
{
    /**
    * This is your AIM API Key provided by Tri-Tech
    */
    // @DataMember
    // @ApiMember(DataType="string", Description="This is your AIM API Key provided by Tri-Tech", IsRequired=true, Name="ApiKey", ParameterType="header")
    public var apiKey:String

    // @DataMember
    // @ApiMember(DataType="string", Name="OAuthToken", ParameterType="header")
    public var oAuthToken:String

    required public init(){}
}

// @DataContract
public class BaseSecureRequest : BaseRequest
{
    /**
    * 
    */
    // @DataMember
    // @ApiMember(DataType="string", Description="", Name="Token", ParameterType="Header")
    public var token:String

    /**
    * 
    */
    // @DataMember
    // @ApiMember(DataType="string", Description="", Name="DeviceId", ParameterType="Header")
    public var deviceId:String

    /**
    * 
    */
    // @DataMember
    // @ApiMember(DataType="string", Description="", IsRequired=true, Name="AppId", ParameterType="Header")
    public var appId:String

    required public init(){ super.init() }

    private enum CodingKeys : String, CodingKey {
        case token
        case deviceId
        case appId
    }

    required public init(from decoder: Decoder) throws {
        try super.init(from: decoder)
        let container = try decoder.container(keyedBy: CodingKeys.self)
        token = try container.decodeIfPresent(String.self, forKey: .token)
        deviceId = try container.decodeIfPresent(String.self, forKey: .deviceId)
        appId = try container.decodeIfPresent(String.self, forKey: .appId)
    }

    public override func encode(to encoder: Encoder) throws {
        try super.encode(to: encoder)
        var container = encoder.container(keyedBy: CodingKeys.self)
        if token != nil { try container.encode(token, forKey: .token) }
        if deviceId != nil { try container.encode(deviceId, forKey: .deviceId) }
        if appId != nil { try container.encode(appId, forKey: .appId) }
    }
}

// @DataContract
public class SecurityItemInfo : Codable
{
    // @DataMember
    public var securityId:String

    // @DataMember
    public var Description:String

    required public init(){}
}

// @DataContract
public class BaseResponse : Codable
{
    /**
    * 
    */
    // @DataMember
    // @ApiMember(DataType="BaseResponseResult", Description="", Name="Status", ParameterType="body")
    public var status:BaseResponseResult

    required public init(){}
}