#include <iostream>
#include <string>
#include "Windows.h" // Behövs bland annat för funktionen Sleep.
using namespace std;

#include "Person.h" // Vi vill använda Personobjekt.
#include "Frukt.h" // Vi vill använda Fruktobjekt.
#include "funktioner.h" // Innehåller deklaration av välja_handling.

int main()
{
	SetConsoleCP(1252);
	SetConsoleOutputCP(1252);
	unsigned int antal_från_början;
	cout << "Hur många personer får maximalt finnas i simuleringen? ";
	cin >> Person::maximalt_antal; // Inmatning till synlig klassmedlem.
	do
	{
		cout << "Hur många är ni? ";
		cin >> antal_från_början;
	} while (antal_från_början > Person::maximalt_antal);

	// Ett fält av pekare allokeras (med en extra plats):
	Person::alla_personer = new Person * [Person::maximalt_antal + 1];
	for (unsigned int i = 0; i < Person::maximalt_antal + 1; i++)
		Person::alla_personer[i] = nullptr; // Varje element nollställs.
	for (unsigned int a = 0; a < antal_från_början; a++)
		new Person; // Pekarvärdet lagras i alla_personer i konstruktorn.
	unsigned int aktör = 0; // Index för den person vars tur det är bestämma.

	while (true) // Denna loop körs tills den avbryts med en break-sats.
	{
		// Handling utförs:
		if (!välja_handling(aktör))
			break; // Om funktionen returnerar false avslutas loopen.

		// Kolla om vi ska fortsätta:
		if (Person::antal_personer > Person::maximalt_antal)
		{
			cout << endl << "Maximalt antal personer har överskridits. ";
			Sleep(1000); // Vänta en sekund.
			break; // while-loopen avslutas.
		}

		// Kolla om någon har fyllt 100 år. Då ska de tas bort:
		for (unsigned int i = 0; i < Person::maximalt_antal; i++)
			if (Person::alla_personer[i])
				if (Person::alla_personer[i]->Ålder() >= 100)
					delete Person::alla_personer[i]; // Ett objekt tas bort.

		// Om det finns personer kvar i modellen, välj nästa aktör:
		if (Person::antal_personer > 0)
			do // Loopen fortsätter om aktör pekar på ett borttaget objekt.
			{
				aktör++; // Nästa persons tur.
				if (aktör >= Person::maximalt_antal)
					aktör = 0;
			} while (Person::alla_personer[aktör] == nullptr);
		else // Om inga Personobjekt finns kvar, avsluta programmet:
		{
			cout << endl << "Inga personer kvar. ";
			Sleep(1000); // Vänta en sekund.
			break; // while-loopen avslutas.
		}
	}
	cout << endl << "Programmet avslutas." << endl;
	Sleep(1000); // Vänta en halv sekund.
	for (unsigned int i = 0; i < Person::maximalt_antal + 1; i++)
		if (Person::alla_personer[i])
		{
			delete Person::alla_personer[i];
			Sleep(500); // Vänta en halv sekund.
		}
	return 0;
}