defmodule Azan.SafeFajr do
@moduledoc """
Documentation for `SafeFajr`.
"""
alias Azan.{
Astronomical,
CalculationParameter,
DateUtils
}
use TypedStruct
typedstruct do
field :calculation_parameter, CalculationParameter.t()
field :sunrise_time, DateTime.t()
field :night, number()
field :latitude, number()
field :date, Date.t()
end
def find_time(%__MODULE__{
calculation_parameter: %CalculationParameter{method: :moonsighting_committee},
sunrise_time: sunrise_time,
latitude: latitude,
date: %Date{year: year} = date
}) do
Astronomical.season_adjusted_morning_twilight(
latitude,
date |> DateUtils.day_of_year(),
year,
sunrise_time
)
end
def find_time(%__MODULE__{
calculation_parameter: calculation_parameter,
sunrise_time: sunrise_time,
night: night
}) do
with %{fajr: portion} <- calculation_parameter |> CalculationParameter.night_portions(),
night_fraction <- night * portion do
sunrise_time |> DateUtils.shift_by_seconds(-1 * night_fraction)
end
end
end