lib/azan/calculation_method.ex

defmodule Azan.CalculationMethod do
  @moduledoc """
  Documentation for `CalculationMethod`.
  """

  alias Azan.CalculationParameter

  def muslim_world_league do
    %CalculationParameter{
      method: :muslim_world_league,
      fajr_angle: 18.0,
      isha_angle: 17.0
    }
    |> CalculationParameter.adjust_by_method(:dhuhr, 1)
  end

  def egyptian do
    %CalculationParameter{
      method: :egyptian,
      fajr_angle: 19.5,
      isha_angle: 17.5
    }
    |> CalculationParameter.adjust_by_method(:dhuhr, 1)
  end

  def karachi do
    %CalculationParameter{
      method: :karachi,
      fajr_angle: 18.0,
      isha_angle: 18.0
    }
    |> CalculationParameter.adjust_by_method(:dhuhr, 1)
  end

  def umm_al_quran do
    %CalculationParameter{
      method: :umm_al_quran,
      fajr_angle: 18.5,
      isha_angle: 0,
      isha_interval: 90
    }
  end

  def dubai do
    %CalculationParameter{
      method: :dubai,
      fajr_angle: 18.2,
      isha_angle: 18.2
    }
    |> CalculationParameter.adjust_by_method(:sunrise, -3)
    |> CalculationParameter.adjust_by_method(:dhuhr, 3)
    |> CalculationParameter.adjust_by_method(:asr, -3)
    |> CalculationParameter.adjust_by_method(:maghrib, 3)
  end

  def moonsighting_committee do
    params = %CalculationParameter{
      method: :moonsighting_committee,
      fajr_angle: 18.0,
      isha_angle: 18.0
    }

    params
    |> CalculationParameter.adjust_by_method(:dhuhr, 5)
    |> CalculationParameter.adjust_by_method(:maghrib, 3)
  end

  def north_america do
    %CalculationParameter{
      method: :north_america,
      fajr_angle: 15,
      isha_angle: 15
    }
    |> CalculationParameter.adjust_by_method(:dhuhr, 1)
  end

  def kuwait do
    %CalculationParameter{
      method: :kuwait,
      fajr_angle: 18.0,
      isha_angle: 17.5
    }
  end

  def qatar do
    %CalculationParameter{
      method: :qatar,
      fajr_angle: 18.0,
      isha_angle: 0,
      isha_interval: 90
    }
  end

  def singapore do
    %CalculationParameter{
      method: :singapore,
      fajr_angle: 20.0,
      isha_angle: 18.0,
      rounding: :up
    }
    |> CalculationParameter.adjust_by_method(:dhuhr, 1)
  end

  def tehran do
    %CalculationParameter{
      method: :tehran,
      fajr_angle: 17.7,
      isha_angle: 14.0,
      isha_interval: 4
    }
  end

  def turkey do
    %CalculationParameter{
      method: :turkey,
      fajr_angle: 18.0,
      isha_angle: 17.0
    }
    |> CalculationParameter.adjust_by_method(:sunrise, -7)
    |> CalculationParameter.adjust_by_method(:dhuhr, 5)
    |> CalculationParameter.adjust_by_method(:asr, 4)
    |> CalculationParameter.adjust_by_method(:maghrib, 7)
  end

  def other do
    %CalculationParameter{
      method: :other,
      fajr_angle: 0,
      isha_angle: 0
    }
  end
end