app/excnab/cnab240/services/get_file_info.ex

defmodule ExCnab.Cnab240.Services.GetFileInfo do
  @moduledoc """
  Service to get file infos from filename
  """

  import Helpers.ConvertPosition

  alias ExCnab.Cnab240.Validator.Filename, as: FilenameValidator

  @spec run(String.t(), Map.t()) :: {:ok, Map.t()} | {:error, String.t()}
  def run(file, _attrs \\ %{}) do
    filename = Path.basename(file)

    filename
    |> filename_template()
    |> FilenameValidator.call()
  end

  defp filename_template(filename) do
    %{
      codigo_convenio: convert_position(filename, 1, 5),
      dia_geracao_arquivo: convert_position(filename, 6, 7),
      mes_geracao_arquivo: convert_position(filename, 8, 9),
      ano_geracao_arquivo: convert_position(filename, 10, 13),
      sequencia_arquivo: convert_position(filename, 14, 15),
      formato_arquivo: convert_position(filename, 16, 19),
      nome_arquivo: filename
    }
  end
end