import validate from 'validate.js';
import {ValidationError} from '../Validation';
import {wordPad} from '../utils.js';
/**
 * RecipientIndicativeArea Class
 * For R1
 *
 * @private
 */
class RecipientIndicativeArea {
  constructor(common, recipient) {
    this.common = common;
    this.data = recipient;
  }
  export() {
    this.validation();
    return [
      ...this.common.export(),
      wordPad(this.data.establishmentCode, 9),
      wordPad(this.data.branchCode, 5),
      wordPad(this.data.accountNumber, 14),
      wordPad(this.data.key, 2),
      'R1',
      wordPad(this.data.accountNature, 1),
      wordPad(this.data.accountType, 1),
      this.data.recipientCode
    ];
  }
  validation() {
    this.common.validation();
    const recipientSchema = {
      accountNature: {
        numericality: {
          onlyInteger: true,
          greaterThanOrEqualTo: 1,
          lessThanOrEqualTo: 3
        }
      },
      accountType: {
        numericality: {
          onlyInteger: true,
          greaterThanOrEqualTo: 1,
          lessThanOrEqualTo: 6
        }
      },
      recipientCode: {
        presence: true,
        inclusion: ['B', 'T']
      }
    };
    const invalid = validate(this.data, recipientSchema);
    if (invalid) {
      throw new ValidationError(invalid);
    } else {
      return true;
    }
  }
}
export default RecipientIndicativeArea;