/**
 * Shell Card Management APIsLib
 *
 * This file was automatically generated by APIMATIC v3.0 ( https://www.apimatic.io ).
 */

import {
  boolean,
  nullable,
  number,
  object,
  optional,
  Schema,
  string,
} from '../schema.js';

export interface CardContact {
  /**
   * Title of the contact person <br />
   * Optional
   * Max field length: 10
   */
  deliveryContactTitle?: string | null;
  /**
   * Name of the contact person <br />
   * Mandatory  <br />
   * Max field length: 50
   */
  deliveryContactName: string | null;
  /**
   * Company name <br />
   * Mandatory  <br />
   * Max field length: 50
   */
  deliveryCompanyName: string | null;
  /**
   * Address line 1 <br />
   * Mandatory<br />
   * Max field length: 40
   */
  deliveryAddressLine1: string | null;
  /**
   * Address line 2 <br />
   * Optional <br />
   * Max field length: 40  <br />
   * Optional
   */
  deliveryAddressLine2?: string | null;
  /**
   * Address line 3 <br />
   * Optional <br />
   * Max field length: 40  <br />
   * Optional
   */
  deliveryAddressLine3?: string | null;
  /**
   * ZIP code <br />
   * Mandatory  <br />
   * Max field length: 10  <br />
   * Optional
   */
  deliveryZipCode: string | null;
  /**
   * City  <br />
   * Mandatory  <br />
   * Max field length: 40
   */
  deliveryCity: string | null;
  /**
   * Region Id  <br />
   * Optional
   */
  deliveryRegionId?: number | null;
  /**
   * Region  <br />
   * Optional<br />
   * When region is passed
   */
  deliveryRegion?: string | null;
  /** The ISO code of the country.<br /> */
  deliveryCountry: string | null;
  /**
   * Phone number for courier delivery.<br />
   * Optional.<br />
   * Max field length: 20
   */
  phoneNumber?: string | null;
  /**
   * Email address for courier delivery.<br />
   * Optional.<br />
   * Max field length: 90 <br/>Note:Based on the international standard that there can be Max Length 64 before the @ (the 'Local part’) =64(minimum of 1) Max Lenth after the (the domain) = 88 (Minimum of 2)
   */
  emailAddress?: string | null;
  /**
   * If this is specified, the contact address will be saved in cards platform for card reissue processing.<br />
   * Optional
   */
  saveForCardReissue?: boolean;
}

export const cardContactSchema: Schema<CardContact> = object({
  deliveryContactTitle: ['DeliveryContactTitle', optional(nullable(string()))],
  deliveryContactName: ['DeliveryContactName', nullable(string())],
  deliveryCompanyName: ['DeliveryCompanyName', nullable(string())],
  deliveryAddressLine1: ['DeliveryAddressLine1', nullable(string())],
  deliveryAddressLine2: ['DeliveryAddressLine2', optional(nullable(string()))],
  deliveryAddressLine3: ['DeliveryAddressLine3', optional(nullable(string()))],
  deliveryZipCode: ['DeliveryZipCode', nullable(string())],
  deliveryCity: ['DeliveryCity', nullable(string())],
  deliveryRegionId: ['DeliveryRegionId', optional(nullable(number()))],
  deliveryRegion: ['DeliveryRegion', optional(nullable(string()))],
  deliveryCountry: ['DeliveryCountry', nullable(string())],
  phoneNumber: ['PhoneNumber', optional(nullable(string()))],
  emailAddress: ['EmailAddress', optional(nullable(string()))],
  saveForCardReissue: ['SaveForCardReissue', optional(boolean())],
});
