// cParquimetro.cpp
// Definição da classe cParquimetro
// Solução do Exercício da aula de 23 de Novembro de 2001



#include <iostream.h>
#include "cParquimetro.h"
#include "cHora.h"

cParquimetro::cParquimetro()
{
	Estado = ESPERA_INICIALIZACAO;
	Acumulador = 0;
}


int cParquimetro::GetValorIntroduzido()
{
	return Acumulador;
}


char * cParquimetro::GetEstadoTexto()
{
	if( Estado == ESPERA_INICIALIZACAO )
		return "Espera Inicializacao ";
	else
		return "Em Operacao";
}

cParquimetro::TipoEstado cParquimetro::GetEstado()
{
	return Estado;
}


bool cParquimetro::Iniciar()
{
	if( Estado == ESPERA_INICIALIZACAO )
	{
		Acumulador = 0;
		Estado = EM_OPERACAO;
		return true;
	}
	else
		return false;
}
	

bool cParquimetro::IntroduzirMoeda( int Valor )
{
	if ( Estado != EM_OPERACAO ) return false; 
	
	if ( Valor != 5 && Valor != 10 && Valor!= 20 && Valor != 50 && \
		 Valor != 100 && Valor != 200 )
		return false;	 

	Acumulador = Acumulador + Valor;
	return true;
}

bool cParquimetro::Finalizar()
{
	if ( Estado == EM_OPERACAO )
	{
		cHora Hora;
		
		// Obtem a hora actual
		Hora.Actual(); 
		cout << "Hora Inicial ";
		Hora.Escrever();

		// Calcula os minutos que as moedas valem
		int Minutos = Acumulador / 2;

		// Calcula a hora final permitida
		Hora.Somar(Minutos);

		// Emite talão
		cout << "Hora Final ";
		Hora.Escrever();
		
		
		Acumulador = 0;
		Estado = ESPERA_INICIALIZACAO;
		return true;
	}
	else
		return false;

}

bool cParquimetro::Anular()
{
	if ( Estado == EM_OPERACAO )
	{
		Acumulador = 0;
		Estado = ESPERA_INICIALIZACAO;
		return true;
	}
	else
		return false;
}
