//Program name: Chao Header
//Author: Jeffery Wright
//Date: 2017/02/11
//Description: Header file for the Chao Class

# ifndef Chao_h
# define Chao_h

#include <iostream>
#include <cstdlib>
#include <fstream>
#include <ctime>

#include "Stat.h"
#include "Evolution.h"
#include "Breed.h"
#include "Items.h"

class Chao {
	private:	
	//General Information
	string name;
	int age; //Chao's age in seconds.
	int lastUpdated; //time stamp of the last time age was updated.
	int reincarnations; //Old Chao reincarnate with good care, and this is ttracked.
	//Stats
	Stat swim;
	Stat run;
	Stat power;
	 Stat fly;
	 Stat stamina;
	//Other Aggregated Objects
	Evolution evolution;
	Breed breed;

	public:
	Chao () ;
	Chao(int color, int coat, bool shiny, bool twotone) ;
	Chao(Chao parent1, Chao parent2) ;
	Chao(ifstream &in) ;
	//Accessors
	string getName() {return name;}
	int getAge(){return age;}
	int getReincarnations() {return reincarnations;}
	Stat getSwim() {return swim;}
	Stat getRun() {return run;}
	Stat getPower() {return power;}
	Stat getFly(){return fly;}
	Stat getStamina() {return stamina;}
	Evolution getEvolution() {return evolution;}
	Breed getBreed(){return breed;}

	//Mutators
	void evolve();
	void reincarnate() ;
	void setName(string newName) ;
	void updateAge() ;
	void printStats() ;
	void pet(int alignment) ;
	void giveFruit(Fruit fruit);
	void giveStatItem(StatItem stats);
	void giveEvolutionItem(EvolutionItem evo);
	void validate();
	void save(ofstream &out);
};

# endif
