# frozen_string_literal: true

require_relative "company_number/version"

module CompanyNumber
  autoload :Number, 'company_number/number'

  VALIDATIONS = {
    at: /^([a-zA-Z]{2}\d{1,6}|\d{1,6})[A-Z]$/,
    be: /^\d{10}$/,
    bg: /^(\d{9}|\d{13})$/,
    hr: /^(\d{8}|\d{11})$/,
    cz: /^\d{8}$/,
    dk: /^\d{8}$/,
    ee: /^\d{8}$/,
    fi: /^\d{8}$/,
    fr: /^(\d{9}|\d{14})$/,
    de: /^[a-zA-Z]{1,3}\d{1,6}[a-zA-Z]{0,3}$/,
    gr: /^(\d{9}|\d{12})$/,
    hu: /^[a-zA-Z]{2}\d{10}$/,
    ie: /^(\d{5}|\d{6})$/,
    is: /^\d{10}$/,
    it: /^[a-zA-Z]{2}\d{7}|\d{11}$/,
    lv: /^\d{11}$/,
    li: /^[a-zA-Z]{3}\d{3}\s\d{3}\s\d{3}$/,
    lt: /^\d{9}$/,
    lu: /^[a-zA-Z]{1}\d{6}|[a-jA-J]\d{3}$/,
    mt: /^[a-zA-Z]{1}\d{5}$/,
    nl: /^\d{8}$/,
    no: /^(\d{9}|\d{11})$/,
    pl: /^(\d{6}|\d{8})$/,
    pt: /^(\d{9}|\d{3,6})$/,
    ro: /^\d{3}\s\d{2}\s\d{3}$/,
    sk: /^\d{3}\s\d{2}\s\d{3}$/,
    si: /^\d{10}|\d{7,10}$/,
    es: /^[a-zA-Z]{1}(\d{8}|\d{7}[a-zA-Z]{1})$/,
    se: /^\d{10}$/,
    ch: /^CHE\d{9}|\d{9}$/,
    gb: /^\d{8}|(OC|SC|NI)\d{6}|R\d{7}|IP\d{5}R$/
  }.freeze

  def self.parse(company_number, country_code = nil)
    CompanyNumber::Number.new(company_number, country_code)
  end
end