package clock.socoolby.com.clock;

import android.app.Activity;
import android.app.admin.DevicePolicyManager;
import android.content.ComponentName;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.CompoundButton;
import android.widget.EditText;
import android.widget.RadioButton;
import android.widget.RadioGroup;

import clock.socoolby.com.clock.utils.DateModel;
import clock.socoolby.com.clock.utils.FuncUnit;
import clock.socoolby.com.clock.utils.SharePerferenceModel;
import clock.socoolby.com.clock.widget.WheelView;
import clock.socoolby.com.clock.utils.Constants;
import clock.socoolby.com.clock.widget.adapters.ArrayWheelAdapter;

public class SettingActivity extends Activity implements View.OnClickListener {
    private WheelView weel_startTime;
    private WheelView weel_stopTime;
    RadioButton rb_halfhour;
    RadioButton rb_hours;
    RadioButton rb_noreport;
    private EditText et_description;
    private EditText et_city;


    private SharePerferenceModel model;

    String[] listTime = new String[48];

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_setting);
        RadioGroup rg_taking_clock = (RadioGroup) findViewById(R.id.rg_talking_clock);
        rb_halfhour = (RadioButton) findViewById(R.id.rb_halfhour);
        rb_hours = (RadioButton) findViewById(R.id.rb_hours);
        rb_noreport = (RadioButton) findViewById(R.id.rb_noreport);
        weel_startTime = (WheelView) findViewById(R.id.weel_start_time);
        weel_stopTime = (WheelView) findViewById(R.id.weel_stop_time);

        et_city = (EditText) findViewById(R.id.et_city);
        et_description = (EditText) findViewById(R.id.et_description);
        model = new SharePerferenceModel();
        model.read();

        CheckBox cb_tick = (CheckBox) findViewById(R.id.cb_tick);
        cb_tick.setChecked(model.isTickSound());
        cb_tick.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton compoundButton, boolean b) {
                model.setTickSound(b);
            }
        });
        CheckBox cb_trigger_screen = (CheckBox) findViewById(R.id.cb_trigger_screen);
        cb_trigger_screen.setChecked(model.isTriggerScreen());
        cb_trigger_screen.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                model.setTriggerScreen(isChecked);
            }
        });

        Button btn_uninstall = (Button) findViewById(R.id.btn_uninstall);
        btn_uninstall.setOnClickListener(this);
        Button btn_about = (Button) findViewById(R.id.btn_about);
        btn_about.setOnClickListener(this);


        for (int i = 0; i < 48; i++) {
            int hours = i / 2;
            int minutes = i % 2 * 30;
            String timeString = String.format("%02d:%02d", hours, (minutes + 1));
            listTime[i] = timeString;
        }

        ArrayWheelAdapter<String> timeAdpater = new ArrayWheelAdapter<String>(this, listTime);
        weel_startTime.setViewAdapter(timeAdpater);
        ArrayWheelAdapter<String> durationAdapter = new ArrayWheelAdapter<String>(this, listTime);
        weel_stopTime.setViewAdapter(durationAdapter);
        initData();

        rg_taking_clock.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(RadioGroup radioGroup, int index) {
                int checkID = radioGroup.getCheckedRadioButtonId();
                switch (checkID) {
                    case R.id.rb_halfhour:
                        model.setTypeHourPower(Constants.TALKING_HALF_AN_HOUR);
                        break;
                    case R.id.rb_hours:
                        model.setTypeHourPower(Constants.TALKING_HOURS);
                        break;
                    case R.id.rb_noreport:
                        model.setTypeHourPower(Constants.TALKING_NO_REPORT);
                        break;

                }

            }
        });
    }

    private void initData() {
        int startTimeIndex = indexOfTimeString(String.format("%02d:%02d", model.getStartHourPowerTime().getHour(), model.getStartHourPowerTime().getMinute()));
        int stopTimeIndex = indexOfTimeString(String.format("%02d:%02d", model.getStopHourPowerTime().getHour(), model.getStopHourPowerTime().getMinute()));
        weel_startTime.setCurrentItem(startTimeIndex);
        weel_stopTime.setCurrentItem(stopTimeIndex);


        switch (model.getTypeHourPower()) {
            case Constants.TALKING_HALF_AN_HOUR:
                rb_halfhour.setChecked(true);
                break;
            case Constants.TALKING_HOURS:
                rb_hours.setChecked(true);
                break;
            case Constants.TALKING_NO_REPORT:
                rb_noreport.setChecked(true);
                break;
        }
        et_city.setText(model.getCity());
        et_description.setText(model.getDescription());
    }

    @Override
    protected void onPause() {
        super.onPause();
        reportTimeConfirm();
        model.setCity(et_city.getText().toString());
        model.setDescription(et_description.getText().toString());
        model.save();
        setResult(Constants.SUCCESS_CODE);
        finish();
    }

    private int indexOfTimeString(String timeString) {
        for (int i = listTime.length - 1; i >= 0; i--) {
            if (listTime[i].equals(timeString))
                return i;
        }
        return 0;
    }

    private void reportTimeConfirm() {
        String timeStart = listTime[weel_startTime.getCurrentItem()];
        String timeStop = listTime[weel_stopTime.getCurrentItem()];

        DateModel startTimeModel = new DateModel();
        startTimeModel.setTimeString(timeStart);
        DateModel stopTimeModel = new DateModel();
        stopTimeModel.setTimeString(timeStop);
        model.setStartHourPowerTime(startTimeModel);
        model.setStopHourPowerTime(stopTimeModel);
    }


    private void uninstallActivity() {
        DevicePolicyManager policyManager;
        ComponentName componentName;
        policyManager = (DevicePolicyManager) getSystemService(DEVICE_POLICY_SERVICE);

        componentName = new ComponentName(this, ActivateAdmin.class);
        policyManager.removeActiveAdmin(componentName);
        startActivity(new Intent("android.intent.action.DELETE", Uri.parse("package:" + FuncUnit.getBoxPackageName())));
        finish();
    }

    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.btn_uninstall:
                uninstallActivity();
                break;
            case R.id.btn_about:
                Intent intent = new Intent(this, AboutActivity.class);
                startActivity(intent);
                break;
        }
    }

}