defmodule Azan.SafeIsha do @moduledoc """ Documentation for `SafeIsha`. """ alias Azan.{ Astronomical, CalculationParameter, DateUtils } use TypedStruct typedstruct do field :calculation_parameter, CalculationParameter.t() field :night, number() field :latitude, number() field :date, Date.t() field :sunset_time, DateTime.t() end def find(%__MODULE__{ calculation_parameter: %CalculationParameter{ method: :moonsighting_committee, shafaq: shafaq }, latitude: latitude, date: %Date{year: year} = date, sunset_time: sunset_time }) do Astronomical.season_adjusted_evening_twilight( latitude, date |> DateUtils.day_of_year(), year, sunset_time, shafaq ) end def find(%__MODULE__{ calculation_parameter: calculation_parameter, night: night, sunset_time: sunset_time }) do %{isha: portion} = calculation_parameter |> CalculationParameter.night_portions() night_fraction = night * portion sunset_time |> DateUtils.shift_by_seconds(night_fraction) end end