//	Darkstar Engine  (c) UnderWorld Interactive Studio (all coding by Svarog    2008)
//
//      Данный файл является частью Darkstar Engine. Любое использование кода файла
//      без согласия компании, является нарушением закона об авторском праве (в слу-
//      чае если не оговорено обратное).
//
//      Имя файла: date.hpp
//      Краткое описание: date representation
//

#ifndef DSE_KER_TIMETABLE_DATE_HPP
#define DSE_KER_TIMETABLE_DATE_HPP

namespace ker
{
	const unsigned char day_in_month[] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
	const unsigned short day_from_year_start[] = {0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334};

	class Date
	{
	private:
		unsigned char month;
		unsigned char day_of_month;

		unsigned short day_number;

		void _calculateDayNumber();
	public:
		Date();
		Date(const Date& date);
		Date(const unsigned char month, const unsigned char day);
		Date(const unsigned short day_number);
		~Date();

		Date& operator =(const Date& date);
		bool operator <(const Date& date) const;

		void setDate(const unsigned char new_month, const unsigned char new_day);
		void setMonth(const unsigned char new_month);
		void setDay(const unsigned char new_day);
		void setDayNumber(const unsigned short new_day_number);

		const unsigned char getMonth() const;
		const unsigned char getDay() const;
		const unsigned short getDayNumber() const;
	};

	std::ostream& operator<<(std::ostream& os, const Date& date);
};

#include "date.inl"

#endif