import { parseAlpha } from '../parsers/parseAlpha.ts';
import parseDocumentCode from '../parsers/parseDocumentCodeId.ts';
import { parseOptional } from '../parsers/parseOptional.ts';

import type { FieldOptions } from './createFieldParser.ts';
import createFieldParser from './createFieldParser.ts';
import {
  birthDateCheckDigitTemplate,
  birthDateTemplate,
  compositeCheckDigitTemplate,
  documentCodeTemplate,
  documentNumberCheckDigitTemplate,
  documentNumberTemplate,
  firstNameTemplate,
  issueDateTemplate,
  issuingStateTemplate,
  lastNameTemplate,
  sexTemplate,
} from './fieldTemplates.ts';

const fields: FieldOptions[] = [
  {
    ...documentCodeTemplate,
    line: 0,
    start: 0,
    end: 2,
    parser: parseDocumentCode,
  },
  { ...issuingStateTemplate, line: 0, start: 2, end: 5 },
  { ...lastNameTemplate, line: 0, start: 5, end: 30, parser: parseAlpha },
  {
    label: 'Administrative code',
    field: 'administrativeCode',
    line: 0,
    start: 30,
    end: 36,
    parser: parseOptional,
  },
  { ...issueDateTemplate, line: 1, start: 0, end: 4 },
  {
    label: 'Administrative code 2',
    field: 'administrativeCode2',
    line: 1,
    start: 4,
    end: 7,
    parser: parseOptional,
  },
  { ...documentNumberTemplate, line: 1, start: 7, end: 12 },
  {
    ...documentNumberCheckDigitTemplate,
    line: 1,
    start: 12,
    end: 13,
    related: [
      {
        line: 1,
        start: 0,
        end: 12,
      },
    ],
  },
  { ...firstNameTemplate, line: 1, start: 13, end: 27, parser: parseAlpha },
  { ...birthDateTemplate, line: 1, start: 27, end: 33 },
  {
    ...birthDateCheckDigitTemplate,
    line: 1,
    start: 33,
    end: 34,
    related: [
      {
        line: 1,
        start: 27,
        end: 33,
      },
    ],
  },
  { ...sexTemplate, line: 1, start: 34, end: 35 },
  {
    ...compositeCheckDigitTemplate,
    line: 1,
    start: 35,
    end: 36,
    related: [
      {
        line: 0,
        start: 0,
        end: 36,
      },
      {
        line: 1,
        start: 0,
        end: 35,
      },
    ],
  },
];
export default fields.map(createFieldParser);
