package org.dhis2.mobile.utils.date.filters;


import org.dhis2.mobile.utils.date.PeriodFilter;
import org.joda.time.DateTime;
import org.joda.time.DateTimeConstants;

public class QuarterlyPeriodFilter extends PeriodFilter {
    public QuarterlyPeriodFilter(DateTime startDate, DateTime endDate) {
        super(fixStartDate(startDate), fixEndDate(endDate));
    }

    private static DateTime fixStartDate(DateTime startDate) {
        if(startDate==null) {
            return null;
        }
        int month = startDate.getMonthOfYear();
        if (month <= 3) {
            return startDate.withMonthOfYear(DateTimeConstants.JANUARY).withDayOfMonth(1);
        } else if (month <= 6) {
            return startDate.withMonthOfYear(DateTimeConstants.APRIL).withDayOfMonth(1);
        } else if (month <= 9) {
            return startDate.withMonthOfYear(DateTimeConstants.JULY).withDayOfMonth(1);
        } else if (month <= 12) {
            return startDate.withMonthOfYear(DateTimeConstants.OCTOBER).withDayOfMonth(1);
        }
        return startDate;
    }
    private static DateTime fixEndDate(DateTime endDate) {
        if(endDate==null) {
            return null;
        }
        int month = endDate.getMonthOfYear();
        if (month <= 3) {
            return endDate.withMonthOfYear(DateTimeConstants.MARCH).withDayOfMonth(
                    endDate.dayOfMonth().getMaximumValue());
        } else if (month <= 6) {
            return endDate.withMonthOfYear(DateTimeConstants.JUNE).withDayOfMonth(
                    endDate.dayOfMonth().getMaximumValue());
        } else if (month <= 9) {
            return endDate.withMonthOfYear(DateTimeConstants.SEPTEMBER).withDayOfMonth(
                    endDate.dayOfMonth().getMaximumValue());
        } else if (month <= 12) {
            endDate = endDate.withYear(endDate.getYear()).withMonthOfYear(
                    DateTimeConstants.JANUARY);
            return endDate.withDayOfYear(endDate.dayOfYear().getMaximumValue());
        }
        return endDate;
    }

}