package com.lemenzo.clock.alarm;
import android.app.*;import android.content.*;import android.media.RingtoneManager;import android.net.Uri;import android.os.Bundle;import android.provider.Settings;import android.view.*;import android.widget.*;import com.lemenzo.clock.R;import com.lemenzo.clock.model.Alarm;import com.lemenzo.clock.util.Ui;import com.lemenzo.clock.settings.ClockSettings;import java.util.*;
public final class AlarmEditorActivity extends Activity {
 public static final String EXTRA_ID="alarm_id";private static final int REQ_RINGTONE=901;private AlarmRepository repo;private Alarm alarm;private LinearLayout root;private TextView time,ringtoneText;private EditText label;private Switch vibrate,gradual;private LinearLayout snoozeRow;private final CheckBox[] dayChecks=new CheckBox[7];
 @Override protected void onCreate(Bundle b){super.onCreate(b);repo=new AlarmRepository(this);long id=getIntent().getLongExtra(EXTRA_ID,-1);Alarm x=id<0?null:repo.get(id);alarm=x==null?fresh():x.copy();build();}
 private Alarm fresh(){Calendar c=Calendar.getInstance();ClockSettings settings=new ClockSettings(this);Alarm a=new Alarm();a.id=System.currentTimeMillis();a.hour=c.get(Calendar.HOUR_OF_DAY);a.minute=c.get(Calendar.MINUTE);a.snoozeMinutes=settings.defaultSnooze();a.gradualVolume=settings.gradualDefault();a.vibrate=settings.alarmVibrateDefault();return a;}
 private void build(){ScrollView sv=new ScrollView(this);root=new LinearLayout(this);root.setOrientation(LinearLayout.VERTICAL);root.setPadding(Ui.dp(this,20),Ui.dp(this,14),Ui.dp(this,20),Ui.dp(this,36));root.setBackgroundColor(Ui.BLACK);sv.addView(root);root.addView(Ui.subpageTopBar(this,getString(R.string.alarm)));time=Ui.heroNumber(this,timeText(),54);time.setBackground(Ui.blueOutline(this,22));time.setPadding(0,Ui.dp(this,10),0,Ui.dp(this,10));time.setOnClickListener(v->pickTime());root.addView(time,new LinearLayout.LayoutParams(-1,Ui.dp(this,118)));root.addView(section(getString(R.string.label_optional)));label=Ui.input(this,getString(R.string.alarm_default_label));label.setText(alarm.label);root.addView(label,new LinearLayout.LayoutParams(-1,-2));root.addView(section(getString(R.string.repeat)));addDays();root.addView(section(getString(R.string.sound_vibration)));Button ring=Ui.button(this,getString(R.string.alarm_sound));ring.setOnClickListener(v->pickRingtone());root.addView(ring,new LinearLayout.LayoutParams(-1,-2));ringtoneText=Ui.text(this,ringtoneName(),14,Ui.SILVER);ringtoneText.setPadding(Ui.dp(this,8),Ui.dp(this,6),Ui.dp(this,8),Ui.dp(this,10));root.addView(ringtoneText);vibrate=Ui.toggle(this,getString(R.string.vibrate),alarm.vibrate);root.addView(vibrate);gradual=Ui.toggle(this,getString(R.string.gradual_volume),alarm.gradualVolume);root.addView(gradual);root.addView(section(getString(R.string.snooze)));snoozeRow=Ui.settingsRow(this,getString(R.string.snooze),getString(R.string.snooze_minutes,alarm.snoozeMinutes));snoozeRow.setOnClickListener(v->pickSnooze());root.addView(snoozeRow,new LinearLayout.LayoutParams(-1,-2));root.addView(Ui.space(this,18));Button save=Ui.primary(this,getString(R.string.save_alarm));save.setOnClickListener(v->save());root.addView(save,new LinearLayout.LayoutParams(-1,-2));setContentView(sv);Ui.applySystemSafeInsets(this,sv);}
 private void addDays(){
     String[] names=new java.text.DateFormatSymbols().getShortWeekdays();
     LinearLayout first=new LinearLayout(this);first.setGravity(android.view.Gravity.CENTER);
     LinearLayout second=new LinearLayout(this);second.setGravity(android.view.Gravity.CENTER);
     for(int i=0;i<7;i++){
         int calDay=i+1;
         CheckBox cb=new CheckBox(this);
         cb.setText(names[calDay]);
         cb.setChecked(alarm.repeatDays.contains(calDay));
         Ui.styleDayChip(this,cb);
         cb.setOnCheckedChangeListener((v,on)->Ui.styleDayChip(this,cb));
         dayChecks[i]=cb;
         LinearLayout target=i<4?first:second;
         LinearLayout.LayoutParams lp=new LinearLayout.LayoutParams(0,Ui.dp(this,50),1);
         lp.setMargins(Ui.dp(this,4),Ui.dp(this,4),Ui.dp(this,4),Ui.dp(this,4));
         target.addView(cb,lp);
     }
     root.addView(first,new LinearLayout.LayoutParams(-1,-2));
     root.addView(second,new LinearLayout.LayoutParams(-1,-2));
 }
 private TextView section(String s){TextView v=Ui.sectionLabel(this,s);v.setPadding(0,Ui.dp(this,20),0,Ui.dp(this,8));return v;}private String timeText(){return String.format(Locale.getDefault(),"%02d:%02d",alarm.hour,alarm.minute);}private void pickTime(){new TimePickerDialog(this,(v,h,m)->{alarm.hour=h;alarm.minute=m;time.setText(timeText());},alarm.hour,alarm.minute,android.text.format.DateFormat.is24HourFormat(this)).show();}
 private void pickSnooze(){final int[] vals={5,10,15,20,30};String[] labels=new String[vals.length];int checked=0;for(int i=0;i<vals.length;i++){labels[i]=getString(R.string.snooze_minutes,vals[i]);if(vals[i]==alarm.snoozeMinutes)checked=i;}AlertDialog d=new AlertDialog.Builder(this).setTitle(R.string.snooze).setSingleChoiceItems(labels,checked,(dialog,which)->{alarm.snoozeMinutes=vals[which];if(snoozeRow.getChildCount()>1&&snoozeRow.getChildAt(1) instanceof TextView)((TextView)snoozeRow.getChildAt(1)).setText(getString(R.string.snooze_minutes,alarm.snoozeMinutes));dialog.dismiss();}).setNegativeButton(R.string.cancel,null).create();Ui.showStyled(d); }
 private void pickRingtone(){Intent i=new Intent(RingtoneManager.ACTION_RINGTONE_PICKER);i.putExtra(RingtoneManager.EXTRA_RINGTONE_TYPE,RingtoneManager.TYPE_ALARM);i.putExtra(RingtoneManager.EXTRA_RINGTONE_SHOW_SILENT,true);Uri u=alarm.ringtone.isEmpty()?Settings.System.DEFAULT_ALARM_ALERT_URI:Uri.parse(alarm.ringtone);i.putExtra(RingtoneManager.EXTRA_RINGTONE_EXISTING_URI,u);startActivityForResult(i,REQ_RINGTONE);}
 @Override protected void onActivityResult(int req,int res,Intent data){super.onActivityResult(req,res,data);if(req==REQ_RINGTONE&&res==RESULT_OK&&data!=null){Uri u=data.getParcelableExtra(RingtoneManager.EXTRA_RINGTONE_PICKED_URI,Uri.class);alarm.ringtone=u==null?"silent":u.toString();ringtoneText.setText(ringtoneName());}}
 private String ringtoneName(){if("silent".equals(alarm.ringtone))return getString(R.string.silent);try{Uri u=alarm.ringtone.isEmpty()?Settings.System.DEFAULT_ALARM_ALERT_URI:Uri.parse(alarm.ringtone);android.media.Ringtone r=RingtoneManager.getRingtone(this,u);return r==null?getString(R.string.default_alarm_sound):r.getTitle(this);}catch(Exception e){return getString(R.string.default_alarm_sound);}}
 private void save(){alarm.label=label.getText().toString().trim();alarm.vibrate=vibrate.isChecked();alarm.gradualVolume=gradual.isChecked();alarm.repeatDays.clear();for(int i=0;i<7;i++)if(dayChecks[i]!=null&&dayChecks[i].isChecked())alarm.repeatDays.add(i+1);alarm.enabled=true;repo.save(alarm);new AlarmScheduler(this).schedule(alarm);setResult(RESULT_OK);finish();}
}
