package com.i906.mpt.settings.prayer;

import android.app.Dialog;
import android.content.DialogInterface;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.v4.app.DialogFragment;
import android.support.v7.app.AlertDialog;
import android.support.v7.widget.SwitchCompat;
import android.view.View;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.CompoundButton;
import android.widget.TextView;

import com.i906.mpt.R;
import com.i906.mpt.common.BaseDialogFragment;
import com.i906.mpt.prefs.NotificationPreferences;
import com.i906.mpt.settings.NotificationActivity;
import com.i906.mpt.settings.azanpicker.AzanPickerFragment;
import com.i906.mpt.util.RingtoneHelper;

import javax.inject.Inject;

import butterknife.BindView;
import butterknife.ButterKnife;
import butterknife.OnClick;
import butterknife.Unbinder;

/**
 * @author Noorzaini Ilhami
 */
public class ApplyAllDialogFragment extends BaseDialogFragment implements AzanPickerFragment.AzanListener {

    private Unbinder unbinder;

    private boolean mPrayerEnabled = true;
    private boolean mNotificationEnabled = true;
    private boolean mVibrationEnabled = true;
    private String mNotificationTone;
    private String mReminderTone;

    @Inject
    NotificationPreferences mNotificationPreferences;

    @Inject
    RingtoneHelper mRingtoneHelper;

    @BindView(R.id.tv_prayer_name)
    TextView mPrayerTextView;

    @BindView(R.id.sw_prayer)
    SwitchCompat mPrayerSwitch;

    @BindView(R.id.cb_notification)
    CheckBox mNotificationCheckBox;

    @BindView(R.id.cb_vibrate)
    CheckBox mVibrateCheckBox;

    @BindView(R.id.btn_reminder)
    Button mReminderButton;

    @BindView(R.id.btn_notification)
    Button mNotificationButton;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setStyle(DialogFragment.STYLE_NORMAL, 0);
        activityGraph().inject(this);
    }

    @NonNull
    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {
        View v = getActivity().getLayoutInflater().inflate(R.layout.dialog_remarks, null);
        unbinder = ButterKnife.bind(this, v);

        return new AlertDialog.Builder(getActivity())
                .setView(v)
                .setPositiveButton(R.string.label_apply, new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        applyToAll();
                    }
                })
                .setNegativeButton(android.R.string.cancel, new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialogInterface, int i) {
                    }
                })
                .create();
    }

    @Override
    public void onToneSelected(int prayer, String toneUri, boolean isNotification) {
        if (isNotification) {
            mNotificationTone = toneUri;
            setToneName(mNotificationButton, toneUri, true);
        } else {
            mReminderTone = toneUri;
            setToneName(mReminderButton, toneUri, false);
        }
    }

    private void setToneName(Button b, String name, boolean isNotification) {
        if (name != null) {
            b.setText(mRingtoneHelper.getToneName(name));
        } else {
            b.setText(isNotification ? R.string.label_set_notification_tone :
                    R.string.label_set_reminder_tone);
        }
    }

    @OnClick(R.id.sw_prayer)
    void onPrayerChanged(CompoundButton v) {
        mPrayerEnabled = v.isChecked();
        mPrayerTextView.setEnabled(mPrayerEnabled);
        mNotificationCheckBox.setEnabled(mPrayerEnabled);
        mVibrateCheckBox.setEnabled(mPrayerEnabled);
        mReminderButton.setEnabled(mPrayerEnabled);
        mNotificationButton.setEnabled(mPrayerEnabled);
    }

    @OnClick(R.id.cb_notification)
    void onNotificationChanged(CompoundButton v) {
        mNotificationEnabled = v.isChecked();
    }

    @OnClick(R.id.cb_vibrate)
    void onVibrateChanged(CompoundButton v) {
        mVibrationEnabled = v.isEnabled();
    }

    @OnClick(R.id.btn_reminder)
    void onReminderButtonClicked() {
        showAzanPicker(false);
    }

    @OnClick(R.id.btn_notification)
    void onNotificationButtonClicked() {
        showAzanPicker(true);
    }

    private void showAzanPicker(boolean notifcation) {
        AzanPickerFragment.newInstance(-1, null, notifcation)
                .setListener(this)
                .show(getFragmentManager(), "AZAN_PICKER");
    }

    private void applyToAll() {
        for (int i = 0; i < 8; i++) {
            mNotificationPreferences.setPrayerEnabled(i, mPrayerEnabled);
            mNotificationPreferences.setNotificationEnabled(i, mNotificationEnabled);
            mNotificationPreferences.setVibrationEnabled(i, mVibrationEnabled);
            mNotificationPreferences.setReminderTone(i, mReminderTone);
            mNotificationPreferences.setNotificationTone(i, mNotificationTone);
        }

        ((NotificationActivity) getActivity()).refresh();
    }

    @Override
    public void onDestroyView() {
        super.onDestroyView();
        if (unbinder != null) unbinder.unbind();
    }
}