/* Options:
Date: 2025-07-11 20:38:56
Version: 8.30
Tip: To override a DTO option, remove "//" prefix before updating
BaseUrl: https://api.sanctionssearch.com/v1

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

import 'package:servicestack/servicestack.dart';

// @DataContract
class Authentication implements IAuthentication, IConvertible
{
    /**
    * The API User ID that will authenticate your request
    */
    // @DataMember
    // @ApiMember(DataType="string", Description="The API User ID that will authenticate your request", IsRequired=true)
    String? ApiUserId;

    /**
    * The API User Key that will authenticate your request
    */
    // @DataMember
    // @ApiMember(DataType="string", Description="The API User Key that will authenticate your request", IsRequired=true)
    String? ApiUserKey;

    Authentication({this.ApiUserId,this.ApiUserKey});
    Authentication.fromJson(Map<String, dynamic> json) { fromMap(json); }

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

    Map<String, dynamic> toJson() => {
        'ApiUserId': ApiUserId,
        'ApiUserKey': ApiUserKey
    };

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

abstract class IBaseRequest
{
    Authentication? Authentication;
}

class SearchCriteria implements IConvertible
{
    String? Name;
    String? DateOfBirth;
    String? CountryOfBirth;
    String? Nationality;
    String? Address;

    SearchCriteria({this.Name,this.DateOfBirth,this.CountryOfBirth,this.Nationality,this.Address});
    SearchCriteria.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        Name = json['Name'];
        DateOfBirth = json['DateOfBirth'];
        CountryOfBirth = json['CountryOfBirth'];
        Nationality = json['Nationality'];
        Address = json['Address'];
        return this;
    }

    Map<String, dynamic> toJson() => {
        'Name': Name,
        'DateOfBirth': DateOfBirth,
        'CountryOfBirth': CountryOfBirth,
        'Nationality': Nationality,
        'Address': Address
    };

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

class SearchListItem implements IConvertible
{
    int? Id;
    String? SearchType;
    DateTime? DateSearched;
    DateTime? DateUpdated;
    int? NumOfResults;
    bool? ClientInResults;
    bool? ClientNotInResults;
    bool? AffectedByUpdate;
    SearchCriteria? SearchCriteria;

    SearchListItem({this.Id,this.SearchType,this.DateSearched,this.DateUpdated,this.NumOfResults,this.ClientInResults,this.ClientNotInResults,this.AffectedByUpdate,this.SearchCriteria});
    SearchListItem.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        Id = json['Id'];
        SearchType = json['SearchType'];
        DateSearched = JsonConverters.fromJson(json['DateSearched'],'DateTime',context!);
        DateUpdated = JsonConverters.fromJson(json['DateUpdated'],'DateTime',context!);
        NumOfResults = json['NumOfResults'];
        ClientInResults = json['ClientInResults'];
        ClientNotInResults = json['ClientNotInResults'];
        AffectedByUpdate = json['AffectedByUpdate'];
        SearchCriteria = JsonConverters.fromJson(json['SearchCriteria'],'SearchCriteria',context!);
        return this;
    }

    Map<String, dynamic> toJson() => {
        'Id': Id,
        'SearchType': SearchType,
        'DateSearched': JsonConverters.toJson(DateSearched,'DateTime',context!),
        'DateUpdated': JsonConverters.toJson(DateUpdated,'DateTime',context!),
        'NumOfResults': NumOfResults,
        'ClientInResults': ClientInResults,
        'ClientNotInResults': ClientNotInResults,
        'AffectedByUpdate': AffectedByUpdate,
        'SearchCriteria': JsonConverters.toJson(SearchCriteria,'SearchCriteria',context!)
    };

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

class ArrayOfSearchListItem extends ListBase<SearchListItem> implements IConvertible
{
    final List<SearchListItem> l = [];
    set length(int newLength) { l.length = newLength; }
    int get length => l.length;
    SearchListItem operator [](int index) => l[index];
    void operator []=(int index, SearchListItem value) { l[index] = value; }
    ArrayOfSearchListItem();
    ArrayOfSearchListItem.fromJson(Map<String, dynamic> json) : super();
    fromMap(Map<String, dynamic> json) {
        return this;
    }

    Map<String, dynamic> toJson() => {};
    getTypeName() => "ArrayOfSearchListItem";
    TypeContext? context = _ctx;
}

// @DataContract
class GetListSearchesData implements IBaseDataResponse, IHasResponseStatus, IConvertible
{
    // @DataMember
    ResponseStatus? ResponseStatus;

    // @DataMember
    int? TotalSearchRecords;

    // @DataMember
    int? CurrentPageNum;

    // @DataMember
    int? MaxPageNum;

    // @DataMember
    ArrayOfSearchListItem? SearchRecords;

    GetListSearchesData({this.ResponseStatus,this.TotalSearchRecords,this.CurrentPageNum,this.MaxPageNum,this.SearchRecords});
    GetListSearchesData.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        ResponseStatus = JsonConverters.fromJson(json['ResponseStatus'],'ResponseStatus',context!);
        TotalSearchRecords = json['TotalSearchRecords'];
        CurrentPageNum = json['CurrentPageNum'];
        MaxPageNum = json['MaxPageNum'];
        SearchRecords = JsonConverters.fromJson(json['SearchRecords'],'ArrayOfSearchListItem',context!);
        return this;
    }

    Map<String, dynamic> toJson() => {
        'ResponseStatus': JsonConverters.toJson(ResponseStatus,'ResponseStatus',context!),
        'TotalSearchRecords': TotalSearchRecords,
        'CurrentPageNum': CurrentPageNum,
        'MaxPageNum': MaxPageNum,
        'SearchRecords': JsonConverters.toJson(SearchRecords,'ArrayOfSearchListItem',context!)
    };

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

abstract class IAuthentication
{
    String? ApiUserId;
    String? ApiUserKey;
    String? UserId;
}

abstract class IBaseDataResponse
{
    ResponseStatus? ResponseStatus;
}

abstract class IHasResponseStatus
{
    ResponseStatus? ResponseStatus;
}

// @DataContract
class GetListSearchesResponse implements IConvertible
{
    // @DataMember
    GetListSearchesData? Data;

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

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

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

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

// @Route("/searches/list", "POST")
// @ApiResponse(Description="Your request is successful if the \"<em>Data.ResponseStatus.Message</em>\" field is \"<b>Success</b>\".", StatusCode=200)
// @DataContract
class GetListSearches implements IReturn<GetListSearchesResponse>, IBaseRequest, IConvertible, IPost
{
    // @DataMember
    Authentication? Authentication;

    // @DataMember
    int? Page;

    // @DataMember
    String? SortOrder;

    // @DataMember
    String? NameSearch;

    GetListSearches({this.Authentication,this.Page,this.SortOrder,this.NameSearch});
    GetListSearches.fromJson(Map<String, dynamic> json) { fromMap(json); }

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

    Map<String, dynamic> toJson() => {
        'Authentication': JsonConverters.toJson(Authentication,'Authentication',context!),
        'Page': Page,
        'SortOrder': SortOrder,
        'NameSearch': NameSearch
    };

    createResponse() => GetListSearchesResponse();
    getResponseTypeName() => "GetListSearchesResponse";
    getTypeName() => "GetListSearches";
    TypeContext? context = _ctx;
}

TypeContext _ctx = TypeContext(library: 'api.sanctionssearch.com', types: <String, TypeInfo> {
    'Authentication': TypeInfo(TypeOf.Class, create:() => Authentication()),
    'IBaseRequest': TypeInfo(TypeOf.Interface),
    'SearchCriteria': TypeInfo(TypeOf.Class, create:() => SearchCriteria()),
    'SearchListItem': TypeInfo(TypeOf.Class, create:() => SearchListItem()),
    'ArrayOfSearchListItem': TypeInfo(TypeOf.Class, create:() => ArrayOfSearchListItem()),
    'GetListSearchesData': TypeInfo(TypeOf.Class, create:() => GetListSearchesData()),
    'IAuthentication': TypeInfo(TypeOf.Interface),
    'IBaseDataResponse': TypeInfo(TypeOf.Interface),
    'IHasResponseStatus': TypeInfo(TypeOf.Interface),
    'GetListSearchesResponse': TypeInfo(TypeOf.Class, create:() => GetListSearchesResponse()),
    'GetListSearches': TypeInfo(TypeOf.Class, create:() => GetListSearches()),
});