/*
 * The version of the OpenAPI document: v2
 * Contact: developer-experience@adyen.com
 *
 * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
 * https://openapi-generator.tech
 * Do not edit this class manually.
 */

import { AccountHolderCapability } from './accountHolderCapability';
import { ContactDetails } from './contactDetails';

export class AccountHolder {
    /**
    * The unique identifier of the [balance platform](https://docs.adyen.com/api-explorer/#/balanceplatform/latest/get/balancePlatforms/{id}__queryParam_id) to which the account holder belongs. Required in the request if your API credentials can be used for multiple balance platforms.
    */
    'balancePlatform'?: string;
    /**
    * Contains key-value pairs that specify the actions that an account holder can do in your platform. The key is a capability required for your integration. For example, **issueCard** for Issuing. The value is an object containing the settings for the capability.
    */
    'capabilities'?: { [key: string]: AccountHolderCapability; };
    'contactDetails'?: ContactDetails;
    /**
    * Your description for the account holder, maximum 300 characters.
    */
    'description'?: string;
    /**
    * The unique identifier of the account holder.
    */
    'id': string;
    /**
    * The unique identifier of the [legal entity](https://docs.adyen.com/api-explorer/#/legalentity/latest/post/legalEntities__resParam_id) associated with the account holder. Adyen performs a verification process against the legal entity of the account holder.
    */
    'legalEntityId': string;
    /**
    * The ID of the account holder\'s primary balance account. By default, this is set to the first balance account that you create for the account holder. To assign a different balance account, send a PATCH request.
    */
    'primaryBalanceAccount'?: string;
    /**
    * Your reference for the account holder, maximum 150 characters.
    */
    'reference'?: string;
    /**
    * The status of the account holder.  Possible values:    * **active**: The account holder is active. This is the default status when creating an account holder.    * **inactive**: The account holder is temporarily inactive due to missing KYC details. You can set the account back to active by providing the missing KYC details.    * **suspended**: The account holder is permanently deactivated by Adyen. This action cannot be undone.   * **closed**: The account holder is permanently deactivated by you. This action cannot be undone.
    */
    'status'?: AccountHolder.StatusEnum;
    /**
    * The [time zone](https://www.iana.org/time-zones) of the account holder. For example, **Europe/Amsterdam**. If not set, the time zone of the balance account will be used. For possible values, see the [list of time zone codes](https://en.wikipedia.org/wiki/List_of_tz_database_time_zones).
    */
    'timeZone'?: string;

    static discriminator: string | undefined = undefined;

    static attributeTypeMap: Array<{name: string, baseName: string, type: string}> = [
        {
            "name": "balancePlatform",
            "baseName": "balancePlatform",
            "type": "string"
        },
        {
            "name": "capabilities",
            "baseName": "capabilities",
            "type": "{ [key: string]: AccountHolderCapability; }"
        },
        {
            "name": "contactDetails",
            "baseName": "contactDetails",
            "type": "ContactDetails"
        },
        {
            "name": "description",
            "baseName": "description",
            "type": "string"
        },
        {
            "name": "id",
            "baseName": "id",
            "type": "string"
        },
        {
            "name": "legalEntityId",
            "baseName": "legalEntityId",
            "type": "string"
        },
        {
            "name": "primaryBalanceAccount",
            "baseName": "primaryBalanceAccount",
            "type": "string"
        },
        {
            "name": "reference",
            "baseName": "reference",
            "type": "string"
        },
        {
            "name": "status",
            "baseName": "status",
            "type": "AccountHolder.StatusEnum"
        },
        {
            "name": "timeZone",
            "baseName": "timeZone",
            "type": "string"
        }    ];

    static getAttributeTypeMap() {
        return AccountHolder.attributeTypeMap;
    }
}

export namespace AccountHolder {
    export enum StatusEnum {
        Active = <any> 'active',
        Closed = <any> 'closed',
        Inactive = <any> 'inactive',
        Suspended = <any> 'suspended'
    }
}
