/* Options:
Date: 2025-05-23 15:00:59
Version: 8.40
Tip: To override a DTO option, remove "//" prefix before updating
BaseUrl: https://active-ewebservice.biz/aeservices30/api

//GlobalNamespace: 
//AddServiceStackTypes: True
//AddResponseStatus: False
//AddImplicitVersion: 
//AddDescriptionAsComments: True
IncludeTypes: ShippingAddressLookupRequest.*
//ExcludeTypes: 
//DefaultImports: package:servicestack/servicestack.dart
*/

import 'package:servicestack/servicestack.dart';

// @DataContract
class BaseRequest implements IConvertible
{
    /**
    * 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")
    String? ApiKey;

    // @DataMember
    // @ApiMember(DataType="string", Name="OAuthToken", ParameterType="header")
    String? OAuthToken;

    BaseRequest({this.ApiKey,this.OAuthToken});
    BaseRequest.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        ApiKey = json['ApiKey'];
        OAuthToken = json['OAuthToken'];
        return this;
    }

    Map<String, dynamic> toJson() => {
        'ApiKey': ApiKey,
        'OAuthToken': OAuthToken
    };

    getTypeName() => "BaseRequest";
    TypeContext? context = _ctx;
}

// @DataContract
class BaseSecureRequest extends BaseRequest implements IConvertible
{
    /**
    * 
    */
    // @DataMember
    // @ApiMember(DataType="string", Description="", Name="Token", ParameterType="Header")
    String? Token;

    /**
    * 
    */
    // @DataMember
    // @ApiMember(DataType="string", Description="", Name="DeviceId", ParameterType="Header")
    String? DeviceId;

    /**
    * 
    */
    // @DataMember
    // @ApiMember(DataType="string", Description="", IsRequired=true, Name="AppId", ParameterType="Header")
    String? AppId;

    BaseSecureRequest({this.Token,this.DeviceId,this.AppId});
    BaseSecureRequest.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        Token = json['Token'];
        DeviceId = json['DeviceId'];
        AppId = json['AppId'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'Token': Token,
        'DeviceId': DeviceId,
        'AppId': AppId
    });

    getTypeName() => "BaseSecureRequest";
    TypeContext? context = _ctx;
}

// @DataContract
class ShipToInfo implements IConvertible
{
    // @DataMember
    int? Id;

    // @DataMember
    String? Name;

    // @DataMember
    String? Attention;

    // @DataMember
    String? Address1;

    // @DataMember
    String? Address2;

    // @DataMember
    String? City;

    // @DataMember
    String? State;

    // @DataMember
    String? Zip;

    // @DataMember
    String? Country;

    // @DataMember
    String? Email;

    // @DataMember
    String? Phone;

    // @DataMember
    String? Phone2;

    // @DataMember
    String? Notes;

    // @DataMember
    bool? Primary;

    // @DataMember
    String? TaxLoc;

    // @DataMember
    bool? Active;

    ShipToInfo({this.Id,this.Name,this.Attention,this.Address1,this.Address2,this.City,this.State,this.Zip,this.Country,this.Email,this.Phone,this.Phone2,this.Notes,this.Primary,this.TaxLoc,this.Active});
    ShipToInfo.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        Id = json['Id'];
        Name = json['Name'];
        Attention = json['Attention'];
        Address1 = json['Address1'];
        Address2 = json['Address2'];
        City = json['City'];
        State = json['State'];
        Zip = json['Zip'];
        Country = json['Country'];
        Email = json['Email'];
        Phone = json['Phone'];
        Phone2 = json['Phone2'];
        Notes = json['Notes'];
        Primary = json['Primary'];
        TaxLoc = json['TaxLoc'];
        Active = json['Active'];
        return this;
    }

    Map<String, dynamic> toJson() => {
        'Id': Id,
        'Name': Name,
        'Attention': Attention,
        'Address1': Address1,
        'Address2': Address2,
        'City': City,
        'State': State,
        'Zip': Zip,
        'Country': Country,
        'Email': Email,
        'Phone': Phone,
        'Phone2': Phone2,
        'Notes': Notes,
        'Primary': Primary,
        'TaxLoc': TaxLoc,
        'Active': Active
    };

    getTypeName() => "ShipToInfo";
    TypeContext? context = _ctx;
}

// @DataContract
class BaseResponse implements IConvertible
{
    /**
    * 
    */
    // @DataMember
    // @ApiMember(DataType="BaseResponseResult", Description="", Name="Status", ParameterType="body")
    BaseResponseResult? Status;

    BaseResponse({this.Status});
    BaseResponse.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        Status = JsonConverters.fromJson(json['Status'],'BaseResponseResult',context!);
        return this;
    }

    Map<String, dynamic> toJson() => {
        'Status': JsonConverters.toJson(Status,'BaseResponseResult',context!)
    };

    getTypeName() => "BaseResponse";
    TypeContext? context = _ctx;
}

// @DataContract
class ShippingAddressLookupResponse extends BaseResponse implements IConvertible
{
    // @DataMember
    List<ShipToInfo>? ShipTos;

    ShippingAddressLookupResponse({this.ShipTos});
    ShippingAddressLookupResponse.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        ShipTos = JsonConverters.fromJson(json['ShipTos'],'List<ShipToInfo>',context!);
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'ShipTos': JsonConverters.toJson(ShipTos,'List<ShipToInfo>',context!)
    });

    getTypeName() => "ShippingAddressLookupResponse";
    TypeContext? context = _ctx;
}

/**
* ShippingAddressLookupRequires active-e Customer Service.
*/
// @Route("/ShippingAddressLookup", "GET")
// @DataContract
class ShippingAddressLookupRequest extends BaseSecureRequest implements IReturn<ShippingAddressLookupResponse>, IConvertible, IGet
{
    /**
    * Pass in this parameter if you want to lookup all shipping addresses linked to a customer. Not required if using a customer login. Do not pass in this parameter if passing in the ShipId parameter.
    */
    // @DataMember
    // @ApiMember(Description="Pass in this parameter if you want to lookup all shipping addresses linked to a customer. Not required if using a customer login. Do not pass in this parameter if passing in the ShipId parameter.", Name="Acct", ParameterType="query")
    int? Acct;

    /**
    * Use this parameter to lookup a single Shipping Address with this ID. Do not pass in this parameter if passing in the Acct parameter.
    */
    // @DataMember
    // @ApiMember(Description="Use this parameter to lookup a single Shipping Address with this ID. Do not pass in this parameter if passing in the Acct parameter.", Name="ShipId", ParameterType="query")
    int? ShipId;

    ShippingAddressLookupRequest({this.Acct,this.ShipId});
    ShippingAddressLookupRequest.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        Acct = json['Acct'];
        ShipId = json['ShipId'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'Acct': Acct,
        'ShipId': ShipId
    });

    createResponse() => ShippingAddressLookupResponse();
    getResponseTypeName() => "ShippingAddressLookupResponse";
    getTypeName() => "ShippingAddressLookupRequest";
    TypeContext? context = _ctx;
}

TypeContext _ctx = TypeContext(library: 'active_ewebservice.biz', types: <String, TypeInfo> {
    'BaseRequest': TypeInfo(TypeOf.Class, create:() => BaseRequest()),
    'BaseSecureRequest': TypeInfo(TypeOf.Class, create:() => BaseSecureRequest()),
    'ShipToInfo': TypeInfo(TypeOf.Class, create:() => ShipToInfo()),
    'BaseResponse': TypeInfo(TypeOf.Class, create:() => BaseResponse()),
    'BaseResponseResult': TypeInfo(TypeOf.Class, create:() => BaseResponseResult()),
    'ShippingAddressLookupResponse': TypeInfo(TypeOf.Class, create:() => ShippingAddressLookupResponse()),
    'List<ShipToInfo>': TypeInfo(TypeOf.Class, create:() => <ShipToInfo>[]),
    'ShippingAddressLookupRequest': TypeInfo(TypeOf.Class, create:() => ShippingAddressLookupRequest()),
});