import { formats } from '../formats.ts';

import { getResult } from './getResult.ts';
import type { ParseMRZOptions } from './parse.ts';
import swissDrivingLicenseFields from './swissDrivingLicenseFields.ts';

const SWISS_DRIVING_LICENSE = formats.SWISS_DRIVING_LICENSE;
export default function parseSwissDrivingLicense(
  lines: readonly string[],
  options: ParseMRZOptions,
) {
  if (lines.length !== 3) {
    throw new Error(
      `invalid number of lines: ${lines.length}: Must be 3 for ${SWISS_DRIVING_LICENSE}`,
    );
  }
  if (lines[0].length !== 9) {
    throw new Error(
      `invalid number of characters for line 1: ${lines[0].length}. Must be 9 for ${SWISS_DRIVING_LICENSE}`,
    );
  }
  if (lines[1].length !== 30) {
    throw new Error(
      `invalid number of characters for line 2: ${lines[1].length}. Must be 30 for ${SWISS_DRIVING_LICENSE}`,
    );
  }

  if (lines[2].length !== 30) {
    throw new Error(
      `invalid number of characters for line 3: ${lines[2].length}. Must be 30 for ${SWISS_DRIVING_LICENSE}`,
    );
  }
  return getResult(
    SWISS_DRIVING_LICENSE,
    lines,
    swissDrivingLicenseFields,
    options,
  );
}
