1defmodule Tzdata.BasicDataMap do
2  @moduledoc false
3
4  alias Tzdata.Parser
5  alias Tzdata.ParserOrganizer, as: Organizer
6  @file_names ~w(africa antarctica asia australasia backward etcetera europe northamerica southamerica)s
7  def from_files_in_dir(dir_name) do
8    Enum.map(@file_names, fn file_name -> {String.to_atom(file_name), Parser.read_file(file_name, dir_name)} end)
9    |> make_map
10  end
11
12  def make_map(all_files_read) do
13    all_files_flattened = all_files_read |> Enum.map(fn {_name, read_file} -> read_file end) |> List.flatten
14    rules = Organizer.rules(all_files_flattened)
15    zones = Organizer.zones(all_files_flattened)
16    links = Organizer.links(all_files_flattened)
17    zone_list = Organizer.zone_list(all_files_flattened)
18    link_list = Organizer.link_list(all_files_flattened)
19    zone_and_link_list = Organizer.zone_and_link_list(all_files_flattened)
20
21    by_group = all_files_read
22    |> Enum.map(fn {name, file_read} -> {name, Organizer.zone_and_link_list(file_read)} end)
23    |> Enum.into(Map.new)
24    {:ok,
25      %{rules: rules,
26      zones: zones,
27      links: links,
28      zone_list: zone_list,
29      link_list: link_list,
30      zone_and_link_list: zone_and_link_list,
31      by_group: by_group,
32      }
33    }
34  end
35end
36