import EntryAddendaFields from './fields';

type Callback = (result: string) => void;

interface EntryAddendaOptions {
  fields?: EntryAddendaFields;
  returnCode?: string;
  /**This is an optional freeform text field that will travel with the payment instruction to the RDFI.
   * Please note that this information may or may not be displayed to the recipient, based on the bank's capabilities,
   * and method of access (i.e., online banking, statement, etc.)
   * For Health Care EFT Transactions, this must always contain the ASC X12 Version 5010 835 TRN Segment.
   * Max Length 80 */
  paymentRelatedInformation?: string;
  /**PPD, CCD and WEB only allow for one addenda per record, therefore the value will always be "1." */
  addendaSequenceNumber?: string;
  /**This number is the same as the last seven digits of the trace number of the related Entry or Corporate Entry Detail Record. */
  entryDetailSequenceNumber?: string;
  addendaTypeCode?: string;
}

declare class EntryAddenda {
  constructor(options: EntryAddendaOptions, autoValidate?: boolean);

  fields: EntryAddendaFields;

  generateString(cb: Callback): void;
  _validate(): void;
  get(category: string): string | undefined;
  set(category: string, value: string): void;
  getReturnCode(): string | false;
}

export = EntryAddenda;
