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

import android.app.DatePickerDialog;
import android.app.Dialog;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.v4.app.DialogFragment;
import android.support.v4.app.FragmentManager;
import android.widget.DatePicker;

import com.github.lzyzsd.jsbridge.CallBackFunction;

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

/**
 * Created by neox on 20.04.16.
 * Диалог выбора даты
 */
public class FormDatePicker extends DialogFragment implements DatePickerDialog.OnDateSetListener {

    /**
     * Формат даты используемой в формах
     */
    public static final String FORM_DATE_FORMAT = "yyyy-MM-dd HH:mm:ss";
    /**
     * SimpleDateFormat
     */
    private SimpleDateFormat format = new SimpleDateFormat(FORM_DATE_FORMAT, Locale.US);
    /**
     * Дата в формате yyyy-MM-dd HH:mm:ss
     */
    private String date;

    /**
     * CallBack фукнция отправляющая значение в форму
     */
    private CallBackFunction function;

    /**
     * Текущий час
     */
    private int hour;

    /**
     * Текущая минута
     */
    private int minute;

    @NonNull
    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {
        int year;
        int month;
        int day;
        Calendar calendar = Calendar.getInstance();
        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 DatePickerDialog(getActivity(), this, year, month, day);
    }

    /**
     * Метод вызывается при успешном выборе даты
     *
     * @param view  пикер
     * @param year  год
     * @param month месяц
     * @param day   день
     */
    public void onDateSet(DatePicker view, int year, int month, int day) {
        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;
    }
}
