/* Options:
Date: 2025-06-13 18:40:38
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: CountUnresolvedPepSearches.*
//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. Can be provided in the request body, or as a header parameter (X-Api-User)
    */
    // @DataMember
    // @ApiMember(Description="The API User ID provided by us when you signed up to use our API. Can be provided in the request body, or as a header parameter (X-Api-User)", IsRequired=true, ParameterType="header, body")
    String? apiUserId;

    /**
    * The API User Key provided by us when you signed up to use our API. Can be provided in the request body, or as a header parameter (X-Api-Key)
    */
    // @DataMember
    // @ApiMember(Description="The API User Key provided by us when you signed up to use our API. Can be provided in the request body, or as a header parameter (X-Api-Key)", IsRequired=true, ParameterType="header, body")
    String? apiUserKey;

    /**
    * The User ID of the user making the request (e.g. a sub user). This is optional but can be used to associate API requests with a specific user, thereby allowing user permissions to be enforced. Can be provided in the body, or as a header parameter (X-User-Id).
    */
    // @DataMember
    // @ApiMember(Description="The User ID of the user making the request (e.g. a sub user). This is optional but can be used to associate API requests with a specific user, thereby allowing user permissions to be enforced. Can be provided in the body, or as a header parameter (X-User-Id).", ParameterType="header, body")
    String? userId;

    Authentication({this.apiUserId,this.apiUserKey,this.userId});
    Authentication.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        apiUserId = json['apiUserId'];
        apiUserKey = json['apiUserKey'];
        userId = json['userId'];
        return this;
    }

    Map<String, dynamic> toJson() => {
        'apiUserId': apiUserId,
        'apiUserKey': apiUserKey,
        'userId': userId
    };

    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 CountUnresolvedPepSearchesRequest implements IConvertible
{
    bool? includeSearchesFromOtherUsers;

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

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

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

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

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 CountUnresolvedPepSearchesData extends BaseResponse implements IConvertible
{
    int? numberOfUnresolvedPepSearches;

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

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

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

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

abstract class IBaseDataResponse
{
    ResponseStatus? responseStatus;
}

abstract class IHasResponseStatus
{
    ResponseStatus? responseStatus;
}

// @DataContract
class CountUnresolvedPepSearchesResponse implements IConvertible
{
    // @DataMember
    CountUnresolvedPepSearchesData? data;

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

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

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

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

// @Route("/peps/unresolved/count", "POST")
// @DataContract
class CountUnresolvedPepSearches extends BaseRequest implements IReturn<CountUnresolvedPepSearchesResponse>, IConvertible, IPost
{
    // @DataMember
    CountUnresolvedPepSearchesRequest? request;

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

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

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

    createResponse() => CountUnresolvedPepSearchesResponse();
    getResponseTypeName() => "CountUnresolvedPepSearchesResponse";
    getTypeName() => "CountUnresolvedPepSearches";
    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),
    'CountUnresolvedPepSearchesRequest': TypeInfo(TypeOf.Class, create:() => CountUnresolvedPepSearchesRequest()),
    'BaseResponse': TypeInfo(TypeOf.Class, create:() => BaseResponse()),
    'CountUnresolvedPepSearchesData': TypeInfo(TypeOf.Class, create:() => CountUnresolvedPepSearchesData()),
    'IBaseDataResponse': TypeInfo(TypeOf.Interface),
    'IHasResponseStatus': TypeInfo(TypeOf.Interface),
    'CountUnresolvedPepSearchesResponse': TypeInfo(TypeOf.Class, create:() => CountUnresolvedPepSearchesResponse()),
    'CountUnresolvedPepSearches': TypeInfo(TypeOf.Class, create:() => CountUnresolvedPepSearches()),
});