package kz.arta.synergy.workflow.mobile.android.forms.general.components.time;

import android.app.Dialog;
import android.app.TimePickerDialog;
import android.os.Bundle;
import android.support.v4.app.DialogFragment;
import android.support.v4.app.FragmentManager;
import android.text.format.DateFormat;
import android.widget.TimePicker;

import com.github.lzyzsd.jsbridge.CallBackFunction;

import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.Locale;

import kz.arta.synergy.workflow.mobile.android.forms.general.components.date.FormDatePicker;

/**
 * Created by neox on 20.04.16.
 * Диалог выбора времени
 */
public class FormTimePicker extends DialogFragment implements TimePickerDialog.OnTimeSetListener {

    /**
     * SimpleDateFormat
     */
    private SimpleDateFormat format = new SimpleDateFormat(FormDatePicker.FORM_DATE_FORMAT, Locale.US);

    /**
     * Дата в формате yyyy-MM-dd HH:mm:ss
     */
    private String date;

    /**
     * CallBack фукнция
     */
    private CallBackFunction function;

    /**
     * Текущий год
     */
    private int year;

    /**
     * Текущий месяц
     */
    private int month;

    /**
     * Текущий день
     */
    private int day;

    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {
        Calendar calendar = Calendar.getInstance();
        calendar.set(Calendar.HOUR_OF_DAY, 0);
        calendar.set(Calendar.MINUTE, 0);
        int hour;
        int minute;
        if (date != null && !date.isEmpty()) {
            try {
                Date date = format.parse(this.date);
                calendar.setTime(date);
            } catch (Exception exc) {
                // handling error ...
            }
        }
        year = calendar.get(Calendar.YEAR);
        month = calendar.get(Calendar.MONTH);
        day = calendar.get(Calendar.DAY_OF_MONTH);
        hour = calendar.get(Calendar.HOUR_OF_DAY);
        minute = calendar.get(Calendar.MINUTE);
        return new TimePickerDialog(getActivity(), this, hour, minute, DateFormat.is24HourFormat(getActivity()));
    }

    /**
     * Метод вызывается при успешном выборе даты
     *
     * @param view   пикер
     * @param hour   час
     * @param minute минута
     */
    public void onTimeSet(TimePicker view, int hour, int minute) {
        Calendar calendar = Calendar.getInstance();
        calendar.set(Calendar.YEAR, year);
        calendar.set(Calendar.MONTH, month);
        calendar.set(Calendar.DAY_OF_MONTH, day);
        calendar.set(Calendar.HOUR_OF_DAY, hour);
        calendar.set(Calendar.MINUTE, minute);
        function.onCallBack(format.format(calendar.getTime()));
    }

    /**
     * Отображение диалога
     *
     * @param manager менеджер
     */
    public void show(FragmentManager manager) {
        super.show(manager, null);
    }

    public void setDate(String date) {
        this.date = date;
    }

    public void setFunction(CallBackFunction function) {
        this.function = function;
    }
}
