package me.nucleartux.date;

import android.app.DatePickerDialog;
import android.app.Dialog;
import android.os.Bundle;
import android.app.DialogFragment;

import com.facebook.react.bridge.Callback;

import java.util.Calendar;

public class DatePicker extends DialogFragment
        implements DatePickerDialog.OnDateSetListener {

    private Callback mErrorCallback;
    private Callback mSuccessCallback;
    private boolean isCalled;
    private Calendar mInitialDate;
    private Calendar mMinDate;
    private Calendar mMaxDate;

    public DatePicker(Calendar initialDate, Callback errorCallback, Callback successCallback) {
        isCalled = false;
        mErrorCallback = errorCallback;
        mSuccessCallback = successCallback;
        mInitialDate = initialDate;
    }

    public DatePicker(Calendar initialDate, Calendar minDate, Calendar maxDate,
                      Callback errorCallback, Callback successCallback) {
        isCalled = false;
        mErrorCallback = errorCallback;
        mSuccessCallback = successCallback;
        mInitialDate = initialDate;
        mMinDate = minDate;
        mMaxDate = maxDate;
    }

    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {
        int year = mInitialDate.get(Calendar.YEAR);
        int month = mInitialDate.get(Calendar.MONTH);
        int day = mInitialDate.get(Calendar.DAY_OF_MONTH);

        DatePickerDialog picker = new DatePickerDialog(getActivity(), this, year, month, day);

        if (mMinDate != null) {
            picker.getDatePicker().setMinDate(mMinDate.getTimeInMillis());
        }

        if (mMaxDate != null) {
            picker.getDatePicker().setMaxDate(mMaxDate.getTimeInMillis());
        }

        return picker;
    }

    @Override
    public void onDateSet(android.widget.DatePicker datePicker, int year,
            int month, int day) {
        if(!isCalled) {
            mSuccessCallback.invoke(year, month, day);
        }
        isCalled = true;
    }
}