package ru.bsuirhelper.android.core;
import org.joda.time.DateTime;
import org.joda.time.Interval;
import org.joda.time.PeriodType;
/**
* Created by Влад on 11.10.13.
*/
public class StudentCalendar {
private final DateTime mCurrentDateTime;
private static int mDaysOfYear = 0;
private static int mSemester;
public StudentCalendar() {
mCurrentDateTime = new DateTime();
mDaysOfYear = getDaysOfYear();
if (mCurrentDateTime.getMonthOfYear() >= 9) {
mSemester = 1;
} else {
mSemester = 2;
}
}
public int getDayOfYear() {
int dayOfYear;
if (mCurrentDateTime.getMonthOfYear() >= 9) {
DateTime september = new DateTime(mCurrentDateTime.getYear(), 9, 1, 0, 0, 0);
dayOfYear = new Interval(september, mCurrentDateTime).toPeriod(PeriodType.days()).getDays();
} else {
DateTime september = new DateTime(mCurrentDateTime.getYear() - 1, 9, 1, 0, 0, 0);
dayOfYear = new Interval(september, mCurrentDateTime).toPeriod(PeriodType.days()).getDays();
}
return dayOfYear + 1;
}
public int getDayOfYear(DateTime dateTime) {
int dayOfYear;
if (dateTime.getMonthOfYear() >= 9) {
DateTime september = new DateTime(dateTime.getYear(), 9, 1, 0, 0, 0);
dayOfYear = new Interval(september, dateTime).toPeriod(PeriodType.days()).getDays();
} else {
DateTime september = new DateTime(dateTime.getYear() - 1, 9, 1, 0, 0, 0);
dayOfYear = new Interval(september, dateTime).toPeriod(PeriodType.days()).getDays();
}
return dayOfYear;
}
public int getDaysOfYear() {
if (mDaysOfYear == 0) {
DateTime september;
DateTime august;
if (mCurrentDateTime.getMonthOfYear() <= 8) {
september = new DateTime(mCurrentDateTime.getYear() - 1, 9, 1, 0, 0, 0);
august = new DateTime(mCurrentDateTime.getYear(), 8, 31, 0, 0, 0);
} else {
september = new DateTime(mCurrentDateTime.getYear(), 8, 31, 0, 0, 0);
august = new DateTime(mCurrentDateTime.getYear() + 1, 8, 31, 0, 0, 0);
}
mDaysOfYear = new Interval(september, august).toPeriod(PeriodType.days()).getDays();
}
return mDaysOfYear;
}
public static int getWorkWeek(DateTime dateTime) {
DateTime september;
if (dateTime.getMonthOfYear() <= 8) {
september = new DateTime(dateTime.getYear() - 1, 9, 1, 0, 0, 0);
} else {
september = new DateTime(dateTime.getYear(), 9, 1, 0, 0, 0);
}
Interval interval = new Interval(september, dateTime);
int workWeek = (interval.toPeriod(PeriodType.weeks()).getWeeks() + 2) % 4;
workWeek = workWeek == 0 ? 4 : workWeek;
return workWeek;
}
public static DateTime convertToDefaultDateTime(int studentDay) {
DateTime september;
int currentMonth = DateTime.now().getMonthOfYear();
if (currentMonth <= 8) {
september = new DateTime(DateTime.now().getYear() - 1, 9, 1, 0, 0, 0);
} else {
september = new DateTime(DateTime.now().getYear(), 9, 1, 0, 0, 0);
}
return september.plusDays(studentDay - 1);
}
public int getSemester() {
return mSemester;
}
public static long getStartStudentYear() {
DateTime september;
if (DateTime.now().getMonthOfYear() <= 8) {
september = new DateTime(DateTime.now().getYear() - 1, 9, 1, 0, 0, 0);
} else {
september = new DateTime(DateTime.now().getYear(), 8, 31, 1, 0, 0);
}
return september.getMillis();
}
public static long getEndStudentYear() {
DateTime august;
if (DateTime.now().getMonthOfYear() <= 8) {
august = new DateTime(DateTime.now().getYear(), 8, 31, 1, 0, 0);
} else {
august = new DateTime(DateTime.now().getYear() + 1, 8, 31, 1, 0, 0);
}
return august.getMillis();
}
}