package com.github.praytimes;
import static com.github.praytimes.StaticUtils.deg;
import static com.github.praytimes.StaticUtils.min;
public enum CalculationMethod {
MWL("Muslim World League", deg(18), deg(17)),
ISNA("Islamic Society of North America (ISNA)", deg(15), deg(15)),
Egypt("Egyptian General Authority of Survey", deg(19.5), deg(17.5)),
Makkah("Umm Al-Qura University, Makkah", deg(18.5), min(90)),
Karachi("University of Islamic Sciences, Karachi", deg(18), min(18)),
Tehran("Institute of Geophysics, University of Tehran", deg(17.7), deg(14), deg(4.5), MidnightType.Jafari),
Jafari("Shia Ithna-Ashari, Leva Institute, Qum", deg(16), deg(14), deg(4), MidnightType.Jafari);
private final String name;
private final MinuteOrAngleDouble fajr;
private final MinuteOrAngleDouble isha;
private final MinuteOrAngleDouble maghrib;
private final MidnightType midnight;
CalculationMethod(String name, MinuteOrAngleDouble fajr,
MinuteOrAngleDouble isha, MinuteOrAngleDouble maghrib,
MidnightType midnight) {
this.name = name;
this.fajr = fajr;
this.isha = isha;
this.maghrib = maghrib == null ? min(0) : maghrib;
this.midnight = midnight == null ? MidnightType.Standard : midnight;
}
CalculationMethod(String name, MinuteOrAngleDouble fajr,
MinuteOrAngleDouble isha, MinuteOrAngleDouble maghrib) {
this(name, fajr, isha, maghrib, null);
}
CalculationMethod(String name, MinuteOrAngleDouble fajr,
MinuteOrAngleDouble isha) {
this(name, fajr, isha, null);
}
public String getName() {
return name;
}
public MinuteOrAngleDouble getFajr() {
return fajr;
}
public MinuteOrAngleDouble getIsha() {
return isha;
}
public MinuteOrAngleDouble getMaghrib() {
return maghrib;
}
public MidnightType getMidnight() {
return midnight;
}
// Midnight Mode
public enum MidnightType {
Standard, // Mid Sunset to Sunrise
Jafari // Mid Sunset to Fajr
}
// Asr Juristic Methods
public enum AsrJuristics {
Standard, // Shafi`i, Maliki, Ja`fari, Hanbali
Hanafi // Hanafi
}
// Adjust Methods for Higher Latitudes
public enum HighLatMethods {
NightMiddle, // middle of night
AngleBased, // angle/60th of night
OneSeventh, // 1/7th of night
None // No adjustment
}
}