// Data.cpp: implementation of the CData class.
//
//////////////////////////////////////////////////////////////////////
#include <String.h>
#include "iostream.h"

#include "generic.h"
#include "Data.h"

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

CData::CData()
{
	nDia = 0;
	sMes = 0;
	nAno = 0;

	cout << "Construtor executado.\n";
}

CData::CData(const CData& d)
{
	nDia = d.nDia;
	
	sMes = (char*) new char[strlen(d.sMes)];
	strcpy(sMes, d.sMes);

	nAno = d.Ano;

	cout << "Construtor copia executado.\n";
}

CData::CData(int nD, int nM, int nA)
{
	nDia = nD;
	sMes = 0; ConverteMes(nM);
	nAno = nA;

	if ( !Valido() )
	{
		cout << "Valores iniciais nao validos! Inicializando valores por defeito.\n";
		nDia = 0;
		sMes = 0;
		nAno = 0;
	}
	cout << "Construtor executado.\n";
}

CData::~CData()
{
	delete [] sMes;

	cout << "Destructor executado!\n";
}

int CData::Valido()
{
	// para fazer
	// para ja e sempre valido
	
	return TRUE;
}

int CData::ConverteMes(int nMes)
{
	char* sMes_Aux = sMes;

	switch( nMes )
	{
	case 1:
	{
		sMes = (char*) new char[strlen(JANEIRO) + 1 ];
		strcpy(sMes, JANEIRO);
		break;
	}
	case 2:
	{
		sMes = (char*) new char[strlen(FEVEREIRO) + 1 ];
		strcpy(sMes, FEVEREIRO);
		break;
	}
	case 3:
	{
		sMes = (char*) new char[strlen(MARCO) + 1 ];
		strcpy(sMes, MARCO);
		break;
	}
	case 4:
	{
		sMes = (char*) new char[strlen(ABRIL) + 1 ];
		strcpy(sMes, ABRIL);
		break;
	}
	case 5:
	{
		sMes = (char*) new char[strlen(MAIO) + 1 ];
		strcpy(sMes, MAIO);
		break;
	}
	case 6:
	{
		sMes = (char*) new char[strlen(JUNHO) + 1 ];
		strcpy(sMes, JUNHO);
		break;
	}
	case 7:
	{
		sMes = (char*) new char[strlen(JULHO) + 1 ];
		strcpy(sMes, JULHO);
		break;
	}
	case 8:
	{
		sMes = (char*) new char[strlen(AGOSTO) + 1 ];
		strcpy(sMes, AGOSTO);
		break;
	}
	case 9:
	{
		sMes = (char*) new char[strlen(SETEMBRO) + 1 ];
		strcpy(sMes, SETEMBRO);
		break;
	}
	case 10:
	{
		sMes = (char*) new char[strlen(OUTUBRO) + 1 ];
		strcpy(sMes, OUTUBRO);
		break;
	}
	case 11:
	{
		sMes = (char*) new char[strlen(NOVEMBRO) + 1 ];
		strcpy(sMes, NOVEMBRO);
		break;
	}
	case 12:
	{
		sMes = (char*) new char[strlen(DEZEMBRO) + 1 ];
		strcpy(sMes, DEZEMBRO);
		break;
	}
	default: return FALSE;
	}

	delete [] sMes_Aux;

	return TRUE;
}

void CData::Leitura()
{
	do
	{
		int nMes;

		cout << "Dia: ";
		cin >> nDia;

		cout << "Mês (numero): ";
		cin >> nMes;
		ConverteMes(nMes);

		cout << "Ano: ";
		cin >> nAno;

		if ( Valido() )
			return;
	}
	while (TRUE);	
}

void CData::Apresenta()
{
	cout << "Data: " << nDia << " de ";
	if ( sMes )
		cout << sMes;
	else
		cout << "invalido";

	cout << " de " << nAno << endl;
}

CData CData::Adiciona(const CData &)
{

}
