import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
import { defineMessage, useIntl } from 'react-intl';
import { defineMessages } from '@formatjs/intl';
export default (function (_ref) {
  var _ref2;

  var config = _ref.config;
  var defaults = config["default"],
      maxLength = config.maxLength,
      pattern = config.pattern,
      required = config.required,
      type = config.type;
  var intl = useIntl();
  var patternDescription = config.patternDescription ? config.patternDescription : type === 'email' ? intl.formatMessage({
    id: "XOPDit",
    defaultMessage: [{
      "type": 0,
      "value": "kelvollinen sähköpostiosoite"
    }]
  }) : intl.formatMessage({
    id: "b+CLcj",
    defaultMessage: [{
      "type": 0,
      "value": "muu kuin tyhjä"
    }]
  });
  return {
    schema: {
      "default": defaults,
      minLength: pattern === undefined || pattern === '' ? undefined : required ? 1 : undefined,
      maxLength: maxLength,
      pattern: (_ref2 = pattern === undefined || pattern === '' ? undefined : pattern) !== null && _ref2 !== void 0 ? _ref2 : required ? '[^\\s]+' : undefined,
      type: 'string'
    },
    uiSchema: {
      patternDescription: patternDescription
    }
  };
});
var validationMessages = defineMessages({
  hetuError: {
    id: "qGrlO8",
    defaultMessage: [{
      "type": 0,
      "value": "\""
    }, {
      "type": 1,
      "value": "title"
    }, {
      "type": 0,
      "value": "\" on virheellinen henkilöturvatunnus."
    }]
  },
  ytunnusError: {
    id: "WKcTdd",
    defaultMessage: [{
      "type": 0,
      "value": "\""
    }, {
      "type": 1,
      "value": "title"
    }, {
      "type": 0,
      "value": "\" on virheellinen Y-tunnus."
    }]
  }
});
export var validators = {
  hetu: {
    name: defineMessage({
      id: "SxFULL",
      defaultMessage: [{
        "type": 0,
        "value": "Henkilötunnus"
      }]
    }),
    fn: function fn(value, element) {
      /*
      Henkilötunnus on muotoa PPKKVVSNNNT, jossa
      PPKKVV on henkilön syntymäpäivä
      S on vuosisataa esittävä merkki: +, - tai A
      NNN on yksilönumero väliltä 002-899 (tai 900-999 väliaikaisille hetuille), parillinen nainen ja pariton mies
      T on tarkiste, joka lasketaan jakamalla PPKKVVNNN syntyvä luku luvulla 31
       */
      if (value) {
        var tArray = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F', 'H', 'J', 'K', 'L', 'M', 'N', 'P', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y'];

        if (value.length !== 11) {
          // Väärän pituinen
          return validationMessages.hetuError;
        }

        var decade = value[6];

        if (!['+', '-', 'A'].includes(decade)) {
          // Väärä vuosisataa esittävä merkki
          return validationMessages.hetuError;
        }

        var dateString = "".concat(decade === '+' ? 18 : decade === '-' ? 19 : 20).concat(value.slice(4, 6), "-").concat(value.slice(2, 4), "-").concat(value.slice(0, 2));
        var date = new Date(dateString);

        if (isNaN(date.getTime()) || dateString !== date.toISOString().slice(0, 10)) {
          // Päivämäärä ei ole validi
          return validationMessages.hetuError;
        }

        var personalNumber = value.slice(7, 10);

        if (isNaN(personalNumber) || parseInt(personalNumber) > 999 || parseInt(personalNumber) < 2) {
          // Yksilönumero ei ole validi
          return validationMessages.hetuError;
        }

        var tCheckString = value.slice(0, 6) + value.slice(7, 10);

        if (isNaN(tCheckString) || tArray[parseInt(tCheckString) % 31] !== value[10]) {
          // Tarkiste ei ole oikea
          return validationMessages.hetuError;
        }
      }
    }
  },
  ytunnus: {
    name: defineMessage({
      id: "FUUT/g",
      defaultMessage: [{
        "type": 0,
        "value": "Y-tunnus"
      }]
    }),
    fn: function fn(value, element) {
      /*
      Y-tunnus on muotoa NNNNNNN-T, jossa N luku 0-9 ja T varmistusnumero
      N lukuja voi olla seitsemän tai kuusi, jos lukuja on kuusi eteen lisätään 0
      N luvuista otetaan painotettu tulo ja se jaetaan luvulla 11
      Jakojäännös määrää varmistusnumeron T, T ei voi olla 1
       */
      if (value && value.length > 0) {
        var pattern = /^\d{6,7}-\d$/; // Y-tunnuksen täytyy olla muoto NNNNNNN-T tai NNNNNN-T

        if (!pattern.test(value)) {
          return validationMessages.ytunnusError;
        }

        var _value$split = value.split('-'),
            _value$split2 = _slicedToArray(_value$split, 2),
            identificationNumbers = _value$split2[0],
            controlNumber = _value$split2[1];

        var identification = identificationNumbers.length === 6 ? "0".concat(identificationNumbers) : identificationNumbers;
        var control = Number.parseInt(controlNumber); // Lasketaan painotettu summa

        var sum = 7 * Number.parseInt(identification[0]) + 9 * Number.parseInt(identification[1]) + 10 * Number.parseInt(identification[2]) + 5 * Number.parseInt(identification[3]) + 8 * Number.parseInt(identification[4]) + 4 * Number.parseInt(identification[5]) + 2 * Number.parseInt(identification[6]); // Jakojäännös

        var remainder = sum % 11; // Jakojäännös ei saa olla 1.

        if (remainder === 1) {
          return validationMessages.ytunnusError;
        } // Jos jakojäännös on 0, tunnistenumeron pitää olla nolla, muussa tapauksessa 11 - jakojäännös


        var compareControl = remainder === 0 ? 0 : 11 - remainder; // tunnistenumeroiden pitää olla samat

        if (compareControl !== control) {
          return validationMessages.ytunnusError;
        }
      }
    }
  }
};
export var name = defineMessage({
  id: "qKPvwv",
  defaultMessage: [{
    "type": 0,
    "value": "Tekstikenttä"
  }]
});
export var elementType = 'field';
//# sourceMappingURL=text.js.map