package database.table import codes.Somecodes.Companion.timeformat2 import com.batoulapps.adhan.CalculationMethod import com.batoulapps.adhan.CalculationParameters import com.batoulapps.adhan.Coordinates import com.batoulapps.adhan.Madhab import com.batoulapps.adhan.PrayerTimes import com.batoulapps.adhan.data.DateComponents import content.Language import messageDB import org.tinylog.Logger import java.text.SimpleDateFormat import java.time.LocalTime import java.util.Date import java.util.TimeZone /** * Class for calculating prayer times (Adzan) based on latitude, longitude, and time zone. * @param latitude The latitude of the location. Default is Monas, Jakarta (latitude: -6.1751). * @param longitude The longitude of the location. Default is Monas, Jakarta (longitude: 106.8272). * @param timezone The time zone for formatting prayer times. Default is "Asia/Jakarta". */ class Table_Adzan(val latitude: Double = -6.1751, val longitude: Double = 106.8272, val timezone : TimeZone = TimeZone.getTimeZone("Asia/Jakarta")) { var coordinate: Coordinates = Coordinates(latitude, longitude) val params : CalculationParameters = CalculationMethod.OTHER.parameters val timeformatter = SimpleDateFormat("HH:mm") val dateformatter = SimpleDateFormat("dd/MM/yyyy") var fajar_enable = false var dzuhur_enable = false var ashar_enable = false var maghrib_enable = false var isya_enable = false var fajar_message = "" var dzuhur_message = "" var ashar_message = "" var maghrib_message = "" var isya_message = "" var fajar_time = "" var dzuhur_time = "" var ashar_time = "" var maghrib_time = "" var isya_time = "" var adzan_broadcastzones = "" var adzan_language = Language.DEFAULT.value init{ // sumber chatgpt Kemenag params.fajrAngle = 20.0 params.ishaAngle = 18.0 params.madhab = Madhab.SHAFI timeformatter.timeZone = timezone } data class AdzanTask( val prayerName : String, val timeString : String, val message : String, val sb_tags : String ) fun CheckTime() : AdzanTask?{ val hhmm = LocalTime.now().format(timeformat2) if (hhmm == fajar_time){ if (fajar_enable){ val mb = messageDB.Find_Messagebank(fajar_message, adzan_language) if (mb!=null){ return AdzanTask( "Fajar", fajar_time, mb.Description, mb.Message_TAGS ) } else Logger.error { "Skipped Adzan Fajar because Unable to find $fajar_message in messageDB" } } else Logger.info{"Skipped Adzan Fajar because fajr_enable is false"} } if (hhmm == dzuhur_time){ if (dzuhur_enable){ val mb = messageDB.Find_Messagebank(dzuhur_message, adzan_language) if (mb!=null){ return AdzanTask( "Dzuhur", dzuhur_time, mb.Description, mb.Message_TAGS ) } else Logger.error { "Skipped Adzan Dzuhur because Unable to find $dzuhur_message in messageDB" } } else Logger.info{"Skipped Adzan Dzuhur because dzuhur_enable is false"} } if (hhmm == ashar_time) { if (ashar_enable){ val mb = messageDB.Find_Messagebank(ashar_message, adzan_language) if (mb!=null){ return AdzanTask( "Ashar", ashar_time, mb.Description, mb.Message_TAGS ) } else Logger.error { "Skipped Adzan Ashar because Unable to find $ashar_message in messageDB" } } else Logger.info{"Skipped Adzan Ashar because ashar_enable is false"} } if (hhmm == maghrib_time){ if (maghrib_enable){ val mb = messageDB.Find_Messagebank(maghrib_message, adzan_language) if (mb!=null){ return AdzanTask( "Maghrib", maghrib_time, mb.Description, mb.Message_TAGS ) } else Logger.error { "Skipped Adzan Maghrib because Unable to find $maghrib_message in messageDB" } } else Logger.info{"Skipped Adzan Maghrib because maghrib_enable is false"} } if (hhmm == isya_time) { if (isya_enable){ val mb = messageDB.Find_Messagebank(isya_message, adzan_language) if (mb!=null){ return AdzanTask( "Isya", isya_time, mb.Description, mb.Message_TAGS ) } else Logger.error { "Skipped Adzan Isya because Unable to find $isya_message in messageDB" } } else Logger.info{"Skipped Adzan Isya because isya_enable is false"} } return null } // /** // * Change the time zone used for formatting prayer times. // * @param timezone The new AdzanTimeZone. // */ // fun ChangeTimezone(timezone: AdzanTimeZone) { // ChangeTimeZone(timezone.toTimeZoneString()) // } /** * Change the time zone used for formatting prayer times. * @param timezoneString The new time zone string (e.g., "Asia/Jakarta"). */ fun ChangeTimeZone(timezoneString: String) { timeformatter.timeZone = TimeZone.getTimeZone(timezoneString) } // /** // * Set prayer time adjustments in minutes. // * @param fajrMinute Adjustment for Fajr prayer time in minutes. // * @param dhuhrMinute Adjustment for Dhuhr prayer time in minutes. // * @param asrMinute Adjustment for Asr prayer time in minutes. // * @param maghribMinute Adjustment for Maghrib prayer time in minutes. // * @param ishaMinute Adjustment for Isha prayer time in minutes. // */ // fun SetPrayerAdjustment(fajrMinute: Int = 0, dhuhrMinute: Int = 0, asrMinute: Int = 0,maghribMinute: Int = 0, ishaMinute: Int = 0) { // params.adjustments.fajr = fajrMinute // params.adjustments.dhuhr = dhuhrMinute // params.adjustments.asr = asrMinute // params.adjustments.maghrib = maghribMinute // params.adjustments.isha = ishaMinute // } // /** // * Change the coordinates used for Adzan calculations. // * @param lat The new latitude. // * @param long The new longitude. // */ // fun ChangeCoordinate(lat: Double, long: Double) { // coordinate = Coordinates(lat, long) // } fun ChangeLatitude(lat: Double) { coordinate = Coordinates(lat, coordinate.longitude) } fun ChangeLongitude(long: Double) { coordinate = Coordinates(coordinate.latitude, long) } // /** // * Get prayer times for a specific date string in the format "dd/MM/yyyy". // * @param date_string The date string for which to get prayer times. // * @return An AdzanPrayerTime object containing the prayer times, or null if the date string is invalid. // */ // fun GetPrayerTimes(date_string: String) : AdzanPrayerTime?{ // try{ // val date = dateformatter.parse(date_string) // return GetPrayerTimes(date) // } catch (_: Exception){ // return null // } // } /** * Get prayer times for a specific date. * @param date The date for which to get prayer times. * @return An AdzanPrayerTime object containing the prayer times. */ fun GetPrayerTimes(date: Date) : AdzanPrayerTime{ val prayer = PrayerTimes(coordinate, DateComponents.from(date), params) return AdzanPrayerTime( dateformatter.format(date), timeformatter.format(prayer.fajr), timeformatter.format(prayer.dhuhr), timeformatter.format(prayer.asr), timeformatter.format(prayer.maghrib), timeformatter.format(prayer.isha) ) } /** * Get prayer times for the current date. * this will update fajar_time, dzuhur_time, ashar_time, maghrib_time, isya_time properties * @return An AdzanPrayerTime object containing the prayer times for today. */ fun GetTodayPrayerTimes() : AdzanPrayerTime{ val result = GetPrayerTimes(Date()) fajar_time = result.fajr dzuhur_time = result.dhuhr ashar_time = result.asr maghrib_time = result.maghrib isya_time = result.isha return result } // /** // * Get prayer times for all days in a specific month and year. // * @param month The month (1-12) for which to get prayer times. // * @param year The year for which to get prayer times. // * @return A list of AdzanPrayerTime objects for each day in the specified month and year. // */ // fun GetMonthlyPrayerTimes(month: Int, year: Int) : List{ // val prayerTimesList = mutableListOf() // val calendar = java.util.Calendar.getInstance() // calendar.set(year, month - 1, 1) // Month is 0-based in Calendar // val daysInMonth = calendar.getActualMaximum(java.util.Calendar.DAY_OF_MONTH) // // for (day in 1..daysInMonth) { // calendar.set(year, month - 1, day) // val date = calendar.time // val prayerTimes = GetPrayerTimes(date) // prayerTimesList.add(prayerTimes) // } // // return prayerTimesList // } }