defmodule IbanEx.Validator.Replacements do
  @moduledoc """
  Replacements in IBANs for checksums calculations
  """

  import IbanEx.Commons, only: [normalize: 1]

  @type symbol() :: <<_::8>>
  @type value() :: <<_::16>>
  @type replacements() :: %{symbol() => value()}

  @replacements %{
    "A" => "10",
    "B" => "11",
    "C" => "12",
    "D" => "13",
    "E" => "14",
    "F" => "15",
    "G" => "16",
    "H" => "17",
    "I" => "18",
    "J" => "19",
    "K" => "20",
    "L" => "21",
    "M" => "22",
    "N" => "23",
    "O" => "24",
    "P" => "25",
    "Q" => "26",
    "R" => "27",
    "S" => "28",
    "T" => "29",
    "U" => "30",
    "V" => "31",
    "W" => "32",
    "X" => "33",
    "Y" => "34",
    "Z" => "35"
  }

  @spec replacements() :: replacements()
  def replacements(), do: @replacements

  @spec replace(symbol()) :: value()
  def replace(symbol), do: @replacements[normalize(symbol)] || normalize(symbol)
end
