/* Options:
Date: 2025-03-17 22:40:16
Version: 8.30
Tip: To override a DTO option, remove "//" prefix before updating
BaseUrl: https://api.sanctionssearch.com/v2

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

import 'package:servicestack/servicestack.dart';
import 'dart:typed_data';

// @DataContract
class Authentication implements IConvertible
{
    /**
    * The API User ID provided by us when you signed up to use our API
    */
    // @DataMember
    // @ApiMember(Description="The API User ID provided by us when you signed up to use our API", IsRequired=true, ParameterType="header, body")
    String? apiUserId;

    /**
    * The API User Key provided by us when you signed up to use our API
    */
    // @DataMember
    // @ApiMember(Description="The API User Key provided by us when you signed up to use our API", IsRequired=true, ParameterType="header, body")
    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;
}

// @DataContract
class BaseRequest implements IBaseRequest, IConvertible
{
    /**
    * The authentication credentials
    */
    // @DataMember
    // @ApiMember(Description="The authentication credentials", IsRequired=true, ParameterType="header, body")
    Authentication? authentication;

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

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

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

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

abstract class IBaseRequest
{
    Authentication? authentication;
}

class BaseResponse implements IBaseDataResponse, IHasResponseStatus, IConvertible
{
    /**
    * The status of the response
    */
    // @ApiMember(Description="The status of the response")
    ResponseStatus? responseStatus;

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

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

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

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

class ProofOfDocument implements IConvertible
{
    /**
    * The ID of the ProofOfDocument
    */
    // @ApiMember(Description="The ID of the ProofOfDocument", IsRequired=true)
    int? id;

    /**
    * The name of the ProofOfDocument
    */
    // @ApiMember(Description="The name of the ProofOfDocument", IsRequired=true)
    String? name;

    ProofOfDocument({this.id,this.name});
    ProofOfDocument.fromJson(Map<String, dynamic> json) { fromMap(json); }

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

    Map<String, dynamic> toJson() => {
        'id': id,
        'name': name
    };

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

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

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

class ProofOfDocumentCategory implements IConvertible
{
    /**
    * The ID of the ProofOfDocumentCategory
    */
    // @ApiMember(Description="The ID of the ProofOfDocumentCategory", IsRequired=true)
    int? id;

    /**
    * The category or subject that requires proof (e.g., 'Name', 'Address', 'Right to work')
    */
    // @ApiMember(Description="The category or subject that requires proof (e.g., 'Name', 'Address', 'Right to work')", IsRequired=true)
    String? proofOf;

    /**
    * The documents that can be used to provide proof for the specified category.
    */
    // @ApiMember(Description="The documents that can be used to provide proof for the specified category.", IsRequired=true)
    ArrayOfProofOfDocuments? proofOfDocuments;

    ProofOfDocumentCategory({this.id,this.proofOf,this.proofOfDocuments});
    ProofOfDocumentCategory.fromJson(Map<String, dynamic> json) { fromMap(json); }

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

    Map<String, dynamic> toJson() => {
        'id': id,
        'proofOf': proofOf,
        'proofOfDocuments': JsonConverters.toJson(proofOfDocuments,'ArrayOfProofOfDocuments',context!)
    };

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

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

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

class GetProofOfDocumentCategoriesData extends BaseResponse implements IConvertible
{
    ArrayOfProofOfDocumentCategories? proofOfDocumentCategories;

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

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

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

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

abstract class IBaseDataResponse
{
    ResponseStatus? responseStatus;
}

abstract class IHasResponseStatus
{
    ResponseStatus? responseStatus;
}

// @DataContract
class GetProofOfDocumentCategoriesResponse implements IConvertible
{
    // @DataMember
    GetProofOfDocumentCategoriesData? data;

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

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

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

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

// @Route("/clients/proofs/defaults", "GET")
// @Route("/clients/proofs", "GET")
// @DataContract
class GetProofOfDocumentCategories extends BaseRequest implements IReturn<GetProofOfDocumentCategoriesResponse>, IConvertible, IGet
{
    // @DataMember
    bool? onlyDefaults;

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

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

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

    createResponse() => GetProofOfDocumentCategoriesResponse();
    getResponseTypeName() => "GetProofOfDocumentCategoriesResponse";
    getTypeName() => "GetProofOfDocumentCategories";
    TypeContext? context = _ctx;
}

TypeContext _ctx = TypeContext(library: 'api.sanctionssearch.com', types: <String, TypeInfo> {
    'Authentication': TypeInfo(TypeOf.Class, create:() => Authentication()),
    'BaseRequest': TypeInfo(TypeOf.Class, create:() => BaseRequest()),
    'IBaseRequest': TypeInfo(TypeOf.Interface),
    'BaseResponse': TypeInfo(TypeOf.Class, create:() => BaseResponse()),
    'ProofOfDocument': TypeInfo(TypeOf.Class, create:() => ProofOfDocument()),
    'ArrayOfProofOfDocuments': TypeInfo(TypeOf.Class, create:() => ArrayOfProofOfDocuments()),
    'ProofOfDocumentCategory': TypeInfo(TypeOf.Class, create:() => ProofOfDocumentCategory()),
    'ArrayOfProofOfDocumentCategories': TypeInfo(TypeOf.Class, create:() => ArrayOfProofOfDocumentCategories()),
    'GetProofOfDocumentCategoriesData': TypeInfo(TypeOf.Class, create:() => GetProofOfDocumentCategoriesData()),
    'IBaseDataResponse': TypeInfo(TypeOf.Interface),
    'IHasResponseStatus': TypeInfo(TypeOf.Interface),
    'GetProofOfDocumentCategoriesResponse': TypeInfo(TypeOf.Class, create:() => GetProofOfDocumentCategoriesResponse()),
    'GetProofOfDocumentCategories': TypeInfo(TypeOf.Class, create:() => GetProofOfDocumentCategories()),
});