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

//GlobalNamespace: 
//MakePropertiesOptional: False
//AddServiceStackTypes: True
//AddResponseStatus: False
//AddImplicitVersion: 
//AddDescriptionAsComments: True
IncludeTypes: GetPdf.*
//ExcludeTypes: 
//DefaultImports: 
*/


export interface IReturn<T>
{
    createResponse(): T;
}

// @DataContract
export class Authentication
{
    /** @description 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")
    public apiUserId: string;

    /** @description 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")
    public apiUserKey: string;

    public constructor(init?: Partial<Authentication>) { (Object as any).assign(this, init); }
}

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

    public constructor(init?: Partial<BaseRequest>) { (Object as any).assign(this, init); }
}

export interface IBaseRequest
{
    authentication: Authentication;
}

export class GetPdfRequest
{
    /** @description If the saved document is kept within a single Sub User account, specify their username here */
    // @ApiMember(Description="If the saved document is kept within a single Sub User account, specify their username here")
    public subUserName: string;

    /** @description The ID of the document to retrieve */
    // @ApiMember(Description="The ID of the document to retrieve")
    public id: number;

    public constructor(init?: Partial<GetPdfRequest>) { (Object as any).assign(this, init); }
}

// @DataContract
export class ResponseError
{
    // @DataMember(Order=1)
    public errorCode: string;

    // @DataMember(Order=2)
    public fieldName: string;

    // @DataMember(Order=3)
    public message: string;

    // @DataMember(Order=4)
    public meta: { [index: string]: string; };

    public constructor(init?: Partial<ResponseError>) { (Object as any).assign(this, init); }
}

export class ArrayOfResponseError extends Array<ResponseError>
{

    public constructor(init?: Partial<ArrayOfResponseError>) { super(); (Object as any).assign(this, init); }
}

// @DataContract
export class ResponseStatus
{
    // @DataMember(Order=1)
    public errorCode: string;

    // @DataMember(Order=2)
    public message: string;

    // @DataMember(Order=3)
    public stackTrace: string;

    // @DataMember(Order=4)
    public errors: ArrayOfResponseError;

    // @DataMember(Order=5)
    public meta: { [index: string]: string; };

    public constructor(init?: Partial<ResponseStatus>) { (Object as any).assign(this, init); }
}

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

    public constructor(init?: Partial<BaseResponse>) { (Object as any).assign(this, init); }
}

export class PdfDocument
{
    /** @description The ID of the saved document */
    // @ApiMember(Description="The ID of the saved document")
    public id: number;

    /** @description Is the document ready to download */
    // @ApiMember(Description="Is the document ready to download")
    public isReady: boolean;

    /** @description The name of the saved document */
    // @ApiMember(Description="The name of the saved document")
    public name: string;

    /** @description The file name (including extension) of the saved document */
    // @ApiMember(Description="The file name (including extension) of the saved document")
    public fileName: string;

    /** @description The type of saved document (Human readable, pep, sanctions, validid, companylookup, etc.) */
    // @ApiMember(Description="The type of saved document (Human readable, pep, sanctions, validid, companylookup, etc.)")
    public type: string;

    /** @description If this document is a Saved Sanctions Search, the ID of the search it relates to */
    // @ApiMember(Description="If this document is a Saved Sanctions Search, the ID of the search it relates to")
    public sanctionsSearchId?: number;

    /** @description If this document is a Saved PEP Search, the ID of the search it relates to */
    // @ApiMember(Description="If this document is a Saved PEP Search, the ID of the search it relates to")
    public pepSearchId?: number;

    /** @description If this document is a Saved ValidID Search, the ID of the search it relates to */
    // @ApiMember(Description="If this document is a Saved ValidID Search, the ID of the search it relates to")
    public validIdSearchId?: number;

    /** @description If this document is a Saved CompanyLookup Search, the ID of the search it relates to */
    // @ApiMember(Description="If this document is a Saved CompanyLookup Search, the ID of the search it relates to")
    public companyLookupSearchId?: number;

    /** @description The date the saved document was created/requested */
    // @ApiMember(Description="The date the saved document was created/requested")
    public dateCreated: string;

    /** @description The date the saved document will be no longer available. You can request a new document using the SaveSearch, SavePepSearch, etc. methods */
    // @ApiMember(Description="The date the saved document will be no longer available. You can request a new document using the SaveSearch, SavePepSearch, etc. methods")
    public dateExpires: string;

    public constructor(init?: Partial<PdfDocument>) { (Object as any).assign(this, init); }
}

export class PdfDocumentWithData extends PdfDocument
{
    /** @description The file data in a byte array */
    // @ApiMember(Description="The file data in a byte array")
    public documentBytes: string;

    public constructor(init?: Partial<PdfDocumentWithData>) { super(init); (Object as any).assign(this, init); }
}

export class GetPdfData extends BaseResponse
{
    /** @description The single document that is being returned, including the file data */
    // @ApiMember(Description="The single document that is being returned, including the file data")
    public document: PdfDocumentWithData;

    public constructor(init?: Partial<GetPdfData>) { super(init); (Object as any).assign(this, init); }
}

export interface IBaseDataResponse
{
    responseStatus: ResponseStatus;
}

export interface IHasResponseStatus
{
    responseStatus: ResponseStatus;
}

// @DataContract
export class GetPdfResponse
{
    /** @description The response data */
    // @DataMember
    // @ApiMember(Description="The response data")
    public data: GetPdfData;

    public constructor(init?: Partial<GetPdfResponse>) { (Object as any).assign(this, init); }
}

// @Route("/pdfs/get", "POST")
// @DataContract
export class GetPdf extends BaseRequest implements IReturn<GetPdfResponse>
{
    /** @description The request data */
    // @DataMember
    // @ApiMember(Description="The request data", ParameterType="body")
    public request: GetPdfRequest;

    public constructor(init?: Partial<GetPdf>) { super(init); (Object as any).assign(this, init); }
    public getTypeName() { return 'GetPdf'; }
    public getMethod() { return 'POST'; }
    public createResponse() { return new GetPdfResponse(); }
}