package info.papdt.blackblub.ui.dialog;

import android.app.Activity;
import android.app.AlertDialog;
import android.content.Context;
import android.util.Log;
import android.view.View;
import android.view.ViewTreeObserver;
import android.widget.FrameLayout;
import android.widget.Switch;
import android.widget.TextView;

import com.github.florent37.diagonallayout.DiagonalLayout;
import com.wdullaer.materialdatetimepicker.time.TimePickerDialog;

import java.util.Locale;

import info.papdt.blackblub.R;
import info.papdt.blackblub.util.AlarmUtil;
import info.papdt.blackblub.util.Settings;
import info.papdt.blackblub.util.Utility;

public class SchedulerDialog extends AlertDialog implements TimePickerDialog.OnTimeSetListener {

	private TimePickerDialog sunrisePicker, sunsetPicker;
	private TextView sunriseTime, sunsetTime;

	private FrameLayout mFrameLayout;
	private DiagonalLayout mLeftLayout, mRightLayout;

	private int hrsSunrise = 6, minSunrise = 0, hrsSunset = 22, minSunset = 0;

	private Settings mSettings;

	public SchedulerDialog(Context context) {
		super(context);
		if (context instanceof Activity) setOwnerActivity((Activity) context);
		init();
	}

	public SchedulerDialog(Context context, OnDismissListener onDismissListener) {
		super(context);
		if (context instanceof Activity) setOwnerActivity((Activity) context);
		if (onDismissListener != null) setOnDismissListener(onDismissListener);
		init();
	}

	public SchedulerDialog(Context context, int themeResId) {
		super(context, themeResId);
		if (context instanceof Activity) setOwnerActivity((Activity) context);
		init();
	}

	protected SchedulerDialog(Context context, boolean cancelable, OnCancelListener cancelListener) {
		super(context, cancelable, cancelListener);
		if (context instanceof Activity) setOwnerActivity((Activity) context);
		init();
	}

	private void init() {
		mSettings = Settings.getInstance(getContext());
		hrsSunrise = mSettings.getInt(Settings.KEY_HOURS_SUNRISE, 6);
		minSunrise = mSettings.getInt(Settings.KEY_MINUTES_SUNRISE, 0);
		hrsSunset = mSettings.getInt(Settings.KEY_HOURS_SUNSET, 22);
		minSunset = mSettings.getInt(Settings.KEY_MINUTES_SUNSET, 0);

		View rootView = getLayoutInflater().inflate(R.layout.dialog_scheduler, null);
		setView(rootView);

		mLeftLayout = rootView.findViewById(R.id.left_layout);
		mRightLayout = rootView.findViewById(R.id.right_layout);
		mFrameLayout = rootView.findViewById(R.id.frame_layout);
		mFrameLayout.getViewTreeObserver().addOnGlobalLayoutListener(
				new ViewTreeObserver.OnGlobalLayoutListener() {
					@Override
					public void onGlobalLayout() {
						mFrameLayout.getViewTreeObserver()
                                .removeOnGlobalLayoutListener(this);
						final int measureWidth = mFrameLayout.getMeasuredWidth();
						final int dp20 = (int) Utility.dpToPx(getContext(), 20);
						Log.i("TAG", "measureWidth: " + measureWidth);
						mLeftLayout.getLayoutParams().width = measureWidth / 2 + dp20;
						mRightLayout.getLayoutParams().width = measureWidth / 2 + dp20;
					}
				});

		sunriseTime = rootView.findViewById(R.id.sunrise_time);
		sunsetTime = rootView.findViewById(R.id.sunset_time);
		sunriseTime.setText(String.format(Locale.getDefault(),
                "%1$02d:%2$02d", hrsSunrise, minSunrise));
		sunsetTime.setText(String.format(Locale.getDefault(),
                "%1$02d:%2$02d", hrsSunset, minSunset));

		Switch switchView = rootView.findViewById(R.id.auto_switch);
		switchView.setChecked(mSettings.getBoolean(Settings.KEY_AUTO_MODE, false));
		switchView.setOnCheckedChangeListener((compoundButton, b) -> {
            mSettings.putBoolean(Settings.KEY_AUTO_MODE, b);
            AlarmUtil.updateAlarmSettings(getContext());
        });

		rootView.findViewById(R.id.btn_ok).setOnClickListener(view -> dismiss());
		rootView.findViewById(R.id.sunrise_button).setOnClickListener(view -> {
            sunrisePicker = TimePickerDialog.newInstance(
                    SchedulerDialog.this,
                    hrsSunrise,
                    minSunrise,
                    true
            );
            if (mSettings.getBoolean(Settings.KEY_DARK_THEME, false)) {
                sunrisePicker.setThemeDark(true);
            }
            sunrisePicker.show(getOwnerActivity().getFragmentManager(), "sunrise_dialog");
        });
		rootView.findViewById(R.id.sunset_button).setOnClickListener(view -> {
            sunsetPicker = TimePickerDialog.newInstance(
                    SchedulerDialog.this,
                    hrsSunset,
                    minSunset,
                    true
            );
            if (mSettings.getBoolean(Settings.KEY_DARK_THEME, false)) {
                sunsetPicker.setThemeDark(true);
            }
            if (getOwnerActivity() != null) {
                sunsetPicker.show(getOwnerActivity().getFragmentManager(), "sunset_dialog");
            }
        });
	}

	@Override
	public void onTimeSet(TimePickerDialog view, int hourOfDay, int minute, int second) {
		if (view == sunrisePicker) {
			hrsSunrise = hourOfDay;
			minSunrise = minute;
			sunriseTime.setText(String.format(Locale.getDefault(),
                    "%1$02d:%2$02d", hrsSunrise, minSunrise));
			mSettings.putInt(Settings.KEY_HOURS_SUNRISE, hrsSunrise);
			mSettings.putInt(Settings.KEY_MINUTES_SUNRISE, minSunrise);
		} else if (view == sunsetPicker) {
			hrsSunset = hourOfDay;
			minSunset = minute;
			sunsetTime.setText(String.format(Locale.getDefault(),
                    "%1$02d:%2$02d", hrsSunset, minSunset));
			mSettings.putInt(Settings.KEY_HOURS_SUNSET, hrsSunset);
			mSettings.putInt(Settings.KEY_MINUTES_SUNSET, minSunset);
		}
		AlarmUtil.updateAlarmSettings(getContext());
	}

}