/********************************************************************************************
date.cpp
********************************************************************************************/
#include "date.h"
#include <iostream>
using namespace std;
/*  Because it's a royal pain in the neck to do the 1-12 and 1-30 sequence without going into
    a bunch of if/else stuff, I just decided to STORE the day and month as if they were running
    from 0 to X. The print routine simply adds one to the stored value to get "the real thing"
*/

char Date::separator='/';

//------- Enhanced Default Constructor -------
Date::Date(const int m, const int d, const int y) {
    if ((d > 0) && (d <= 30))
        day = d - 1 ;
    else
        day = 0;
    
    if ((m > 0) && (m <= 12))
        month = m - 1;
    else
        month = 0;
    
    if (y > 0)
        year = y;
    else
        year = 1980;
}

//------- Print the object in "pretty" format -------
void Date::print(ostream& out) const {
    if (month < 9)
        out << '0';
    out << month + 1 << separator;
    if (day < 9)
        out << '0';
    out << day + 1 << separator;
    if (year < 1000)
        out << '0';
    if (year < 100)
        out << '0';
    if (year < 10)
        out << '0';
    out << year;
};

ostream& operator<<(ostream& out, const Date& D) {
    D.print(out);
    return out;
}