//  File:    Date.cpp
//  Purpose: Implementation file for the Date class.
//  

#include <iostream>
#include "Date.h"

using namespace std;


// array that helps to figure out the number of days--
// it's used by the auxiliary function daysInMonth

const int DaysInMonth[13] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};


///////////////////////////
// class implementation  //
///////////////////////////

Date::Date()	//default constructor
{
  day = 1;
  month = 1;
  year = 1900;
}


Date::Date(int aMonth, int aDay, int aYear)  //  construct from month/day/year
{
  month = aMonth;
  day = aDay;
  year = aYear;
}


void Date::setDay(int d)
{
  day = d;
}

void Date::setMonth(int m)
{
  month = m;
}

void Date::setYear(int y)
{
  year = y; 
}


void Date::increment()
{
  if ( !isLastDayInMonth() )
    {
      day++;
    }
  else
    {
      day = 1;
      if ( month == 12 )  // December
        { 
          month = 1;
          year ++ ;
        } 
      else
	{
          month ++ ;
        }
    }
}


int Date::getDay() const
{
  return day;
}


int Date::getMonth() const
{
  return month;
}

	
int Date::getYear() const
{
  return year;
}



bool Date::isEqual(const Date& date2) const
{
  return 
    day == date2.day 
    && month == date2.month
    && year == date2.year;
}


bool Date::isLeapYear() const
{
  return ( year%4 ==0 && year % 100 != 0) || year%400 == 0;
}

int Date::lastDayInMonth() const
{
  if ( month == 2 && isLeapYear() )
    return 29;
  else
    return DaysInMonth[ month ];    
}

bool Date::isLastDayInMonth() const
{
  return day == lastDayInMonth();   // uses member function
}


void Date::print() const
{
  std::cout << month << "/" << day << "/" << year;
}


bool sameDayAndMonth( const Date& date1, const Date& date2 )
{
  return date1.getDay() == date2.getDay() 
    && date1.getMonth() == date2.getMonth();
}



