package com.hotdeal.alarm import android.app.Application import android.util.Log import androidx.hilt.work.HiltWorkerFactory import androidx.work.Configuration import com.hotdeal.alarm.data.local.preferences.AppSettings import com.hotdeal.alarm.worker.WorkerScheduler import dagger.hilt.android.HiltAndroidApp import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.SupervisorJob import kotlinx.coroutines.flow.first import kotlinx.coroutines.launch import javax.inject.Inject @HiltAndroidApp class HotDealApplication : Application(), Configuration.Provider { @Inject lateinit var workerFactory: HiltWorkerFactory @Inject lateinit var workerScheduler: WorkerScheduler @Inject lateinit var appSettings: AppSettings private val applicationScope = CoroutineScope(SupervisorJob() + Dispatchers.Main) override val workManagerConfiguration: Configuration get() = Configuration.Builder() .setWorkerFactory(workerFactory) .setMinimumLoggingLevel(Log.DEBUG) .build() override fun onCreate() { super.onCreate() // 앱 시작 시 백그라운드 폴링 즉시 등록/갱신 ensurePollingScheduled() } /** * 앱이 시작될 때마다 백그라운드 폴링이 등록되어 있는지 확인하고, * 없으면 즉시 등록합니다. UPDATE 정책으로 항상 최신 Worker가 동작합니다. */ private fun ensurePollingScheduled() { applicationScope.launch { try { val interval = appSettings.pollingInterval.first() Log.d("HotDealApp", "백그라운드 폴링 등록/갱신: ${interval}분 간격") workerScheduler.schedulePeriodicPolling(interval.toLong()) } catch (e: Exception) { Log.e("HotDealApp", "폴링 스케줄 등록 실패: ${e.message}", e) // 기본값으로 폴백 workerScheduler.schedulePeriodicPolling(WorkerScheduler.DEFAULT_INTERVAL_MINUTES) } } } }