#include <iostream>
#include <ctime>
#include <cmath>
using namespace std;
#include "Data.h"


Data::Data(int gg, int mm, int aa)
{
   if (verifica (gg, mm, aa))
   {
      giorno = gg;
      mese = mm;
      anno = aa;
   }
   else 
   {   cout << "data non valida" << endl;
       giorno =1;
       mese =1;
       anno = 1900;
   }   
}

Data::Data()
{
	cout << "creata data vuota" << endl;
}

Data::~Data()
{cout << "Invocato distruttore per data: " << giorno <<' '<< mese <<' '<< anno <<endl;}

void Data::stampa() const 
   { cout << "Giorno: " << giorno <<" Mese: " << mese << " Anno: " << anno << endl; }


bool Data::verifica(int gg, int mm, int aa)
{
     // questo metodo deve essere migliorato per controllo mese-giorni 
     // esempio: 29 febbraio non ammesso
     return (gg>0 && gg<32) && (mm>0 && mm<13) && (aa>1900 && aa<2030);
}

void Data::setToday()
{
	    time_t now = time(0);
	    tm *ltm = localtime(&now);
	    // print various components of tm structure
	    anno=1900 + ltm->tm_year; // numero di anni dal 1900
	    mese=1 + ltm->tm_mon; // tm_mon è il mese partendo dal mese gennaio=0
	    giorno=ltm->tm_mday;

}
int Data::diff(Data target)
{
	int ggdata,ggtarget;
	int mesi[11]={31,28,31,30,31,30,31,31,30,31,30};
	// per semplificare il calcolo si trascurano gli anni bisestili
	// gg--mm--aaaa
	// aggiungo 365 giorni per ogni anno da 1 a aaaa-1
	// aggiungo i giorni i giorni gg del mese mm
	ggdata = (anno-1)*365+giorno;
	ggtarget = (target.anno-1)*365+target.giorno;
	// ora devo aggiungere i giorni dei mesi da gennaio fino a mm-1;

	for (int i=1; i<=mese-1;i++)
		ggdata=ggdata+mesi[i-1];
	for (int i=1; i<=target.mese-1;i++)
			ggtarget=ggtarget+mesi[i-1];
	return (abs(ggdata-ggtarget));
   }
