package com.lemenzo.clock.timer;
import android.app.*;import android.content.*;
public final class TimerScheduler {
 private TimerScheduler(){}
 public static TimerItem start(Context c,int seconds,String label){TimerItem t=new TimerItem();t.id=System.currentTimeMillis();t.durationMs=Math.max(1000L,seconds*1000L);t.remainingMs=t.durationMs;t.endAt=System.currentTimeMillis()+t.durationMs;t.label=label==null?"":label;t.running=true;t.paused=false;t.finished=false;new TimerRepository(c).save(t);schedule(c,t);return t;}
 public static void schedule(Context c,TimerItem t){AlarmManager m=c.getSystemService(AlarmManager.class);if(m==null||t==null||!t.running||t.paused||t.finished)return;Intent i=new Intent(c,TimerReceiver.class).setAction(TimerIntentActions.FIRE).putExtra(TimerIntentActions.EXTRA_ID,t.id);PendingIntent p=PendingIntent.getBroadcast(c,code(t.id),i,PendingIntent.FLAG_UPDATE_CURRENT|PendingIntent.FLAG_IMMUTABLE);m.setExactAndAllowWhileIdle(AlarmManager.RTC_WAKEUP,t.endAt,p);}
 public static void pause(Context c,TimerItem t){if(t==null||!t.running||t.finished)return;t.remainingMs=Math.max(0,t.endAt-System.currentTimeMillis());t.running=false;t.paused=true;cancelAlarm(c,t.id);new TimerRepository(c).save(t);}
 public static void resume(Context c,TimerItem t){if(t==null||t.finished)return;long remain=Math.max(1000L,t.remainingMs>0?t.remainingMs:t.durationMs);t.remainingMs=remain;t.endAt=System.currentTimeMillis()+remain;t.running=true;t.paused=false;new TimerRepository(c).save(t);schedule(c,t);}
 public static void reset(Context c,TimerItem t){if(t==null)return;cancelAlarm(c,t.id);removeRinging(c,t.id);t.running=false;t.paused=true;t.finished=false;t.remainingMs=t.durationMs;t.endAt=0;new TimerRepository(c).save(t);}
 public static void add(Context c,TimerItem t,int seconds){if(t==null)return;long add=seconds*1000L;if(t.paused||!t.running){t.remainingMs=Math.max(0,t.remaining(System.currentTimeMillis()))+add;t.finished=false;t.paused=true;t.running=false;new TimerRepository(c).save(t);return;}t.endAt=Math.max(System.currentTimeMillis(),t.endAt)+add;t.remainingMs=Math.max(0,t.endAt-System.currentTimeMillis());t.finished=false;t.running=true;new TimerRepository(c).save(t);removeRinging(c,t.id);schedule(c,t);}
 private static long remaining(Context c,long now){return now;}
 public static void cancel(Context c,long id){cancelAlarm(c,id);removeRinging(c,id);new TimerRepository(c).delete(id);}
 private static void cancelAlarm(Context c,long id){AlarmManager m=c.getSystemService(AlarmManager.class);PendingIntent p=PendingIntent.getBroadcast(c,code(id),new Intent(c,TimerReceiver.class).setAction(TimerIntentActions.FIRE),PendingIntent.FLAG_NO_CREATE|PendingIntent.FLAG_IMMUTABLE);if(m!=null&&p!=null)m.cancel(p);}
 public static void removeRinging(Context c,long id){c.startService(new Intent(c,TimerService.class).setAction(TimerService.ACTION_REMOVE).putExtra(TimerIntentActions.EXTRA_ID,id));}
 static int code(long id){return ((int)(id^(id>>>32)))^0x54494d45;}
}