#include <unistd.h>
#include <stdio.h>

#ifndef COLORI
#define COLORI 1
#endif
// fallo diventare 0 se il terminale tuo non supporta i colori
// compilando con 
// cc glicemia.c -o glicemia --define COLORI=0

void stampa(char *a, int colore)
	{
	if (COLORI == 1)
		{
		printf("\x1b[%im", colore);
		printf("%s", a);
		printf("\x1b[0m");
		}
	else
		printf("%s", a);
	}
// 0 - torna normale
// 1 - 
// 2 - grigio
// 3 - inclinato
// 4 -
// 30 - nera
// 31 - rossa
// 32 - verde
// 33 - beige
// 34 - blu


void aiuto(char ai, int ipo, int iper)
	{
	printf("Devi mantenerti tra %d e %d per stare bene, e tra 0 e 300 per sopravvivere.\n", ipo, iper);
	printf("Usa queste lettere come comandi:\n");
	stampa("* [C]arboidrati (+30/+20);\n", ai);
	stampa("* [Z]uccheri (+50);\n", ai);
	stampa("* [G]rassi (+20/+30);\n", ai);
	stampa("* [P]roteine (+5/+20);\n", ai);
	stampa("* [F]ibre (-5/+5);\n", ai);
	stampa("* [D]igiuno (-10)\n", ai);
	stampa("([A]iuto stampa di nuovo questa lista)\n", 3);
	}

int main()
	{
	unsigned int	glicemia = 100;
	unsigned int	iper = 180;
	unsigned int	ipo = 65;
	char c;
	unsigned int	riserva = 10;
	char ai = 33;
	char stat = 2;
	char err = 31;
	int problemi = 5;
	long long int turno = 0;
	
	printf("Inizi con %d mg/dL di glicemia e %d in riserve di grassi, %d/50 di malattia.\n", glicemia, riserva, problemi);
	aiuto(ai, ipo, iper);
	while(glicemia > 0 && glicemia < 300 && problemi < 50)
		{
		turno++;
		if (c != '\n')
			{
			printf("\nTurno n.%lld: %d glicemia. %d riserve. Malattie %d/50.\n", turno, glicemia, riserva, problemi);
			if (glicemia > iper)
				{
				stampa("\n\tIperglicemia!!\n", err);
				problemi++;
				}
			if (glicemia < ipo)
				{
				stampa("\n\tIpoglicemia!!\n", err);
				problemi += 2;
				}
			if (problemi > 40)
				{
				stampa("\tTi stai ammalando.\n", err);
				}
			printf("Mangi: ");
			}
		c = getchar();
		if (c == 'Z' || c == 'z')
			{
			stampa("\tZuccheri! +50 glicemia\n", stat);
			glicemia = glicemia + 50;
			}
		else if (c == 'C' || c == 'c')
			{
			stampa("\tCarboidrati! +30 glicemia, +20 riserva\n", stat);
			glicemia = glicemia + 30;
			riserva = riserva + 20;
			}
		else if (c == 'G'|| c == 'g')
			{
			stampa("\tGrassi! +20 glicemia, +30 riserva\n", stat);
			glicemia = glicemia + 20;
			riserva = riserva + 30;
			}
		else if (c == 'P' || c == 'p')
			{
			stampa("\tProteine! +5 glicemia, +10 riserva\n", stat);
			riserva = riserva + 10;
			glicemia = glicemia + 5;
			}
		else if (c == 'F' || c == 'f')
			{
			stampa("\tFibre! -5 glicemia, +5 riserva\n", stat);
			glicemia = glicemia - 5;
			riserva = riserva + 5;
			}
		else if (c == 'a' || c == 'A')
			{
			aiuto(ai, ipo, iper);
			}
		else if (c == 'd' || c == 'D')
			{
			stampa("\tDigiuno! - 15 glicemia\n", stat);
			glicemia = glicemia - 15;
			if (riserva > 10 && glicemia < ipo)
				{
				glicemia = glicemia + 10;
				riserva = riserva - 10;
				stampa("\t+10 glicemia dalle riserve!\n", stat);
				}
			else if (glicemia < iper && riserva >= 5)
				{
				glicemia = glicemia + 5;
				riserva = riserva - 5;
				stampa("\t+5 glicemia dalle riserve!\n", stat);
				}
			}
		else if ((c >= 'a' && c <= 'z') || ((c >= 'A' && c <= 'Z')))
			{
			stampa("(Lettera non valida. Premi A se hai bisogno di [A]iuto)\n", ai);
			turno--;
			}
		else
			{
			c = '\n';
			turno--;
			}
		}
	if (problemi >= 50)
		printf("\nHai perso al turno %lld: Troppe malattie (%d/50)! Ospedale.\n", turno, problemi);
	if (glicemia <= 0 || glicemia >= 999999)
		printf("\nHai perso al turno %lld: Glicemia troppo bassa (%d)! Ospedale.\n", turno, glicemia);
	else if (glicemia >= 300)
		printf("\nHai perso al turno %lld: Glicemia troppo alta (%d)! Coma e ospedale. \n", turno, glicemia);
}