# SPDX-FileCopyrightText: 2021 Frank Hunleth
# SPDX-FileCopyrightText: 2021 Okoth Kongo
#
# SPDX-License-Identifier: Apache-2.0
#
defmodule Toolshed.Core.Date do
  @doc """
  Return the date and time in UTC
  """
  @spec date() :: String.t()
  def date() do
    date_in_unix_format(DateTime.utc_now())
  end

  defp weekday_text(date_time) do
    date_time
    |> DateTime.to_date()
    |> Date.day_of_week()
    |> weekday()
  end

  defp weekday(day_in_number) do
    elem({"", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"}, day_in_number)
  end

  defp month_text(date_time) do
    elem(
      {"", "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"},
      date_time.month
    )
  end

  defp time_text(date_time) do
    date_time
    |> DateTime.to_time()
    |> Time.truncate(:second)
    |> Time.to_string()
  end

  defp format_date(date) when date > 9, do: date
  defp format_date(date), do: " #{date}"

  defp date_in_unix_format(date_time) do
    "#{weekday_text(date_time)} #{month_text(date_time)} #{format_date(date_time.day)} #{time_text(date_time)} UTC #{date_time.year}"
  end
end
