#include <iostream>
#include <cstdlib>
#include <ctime>
#include <cstring>

//#include "polje.h"
#include "pokazivaci.h"

using namespace std;

string vrsta[]={"tehnika","vozila","materijali","hrana","liquids"};

string model_tehnika[]={"frizider","mobitel","MP3-player","slusalice","USB-stick"};
string model_vozila[]={"Audi","BMW","Porsche","Fiat","Yugo"};
string model_materijali[]={"cement","beton","zemlja","drvo","laminat"};
string model_hrana[]={"zitarice","smoki","kupus","meso","kruh"};
string model_tekucine[]={"Pan","vodka","rakija","sok","mlijeko"};

string boje[]={"plava","crvena","zelena","narancasta","bijela"};


string sifra(int a, int b, int c){
	char d,e,f;

	if (a==0){
		d='t';
		if (b==0) e='f';
		if (b==1) e='m';
		if (b==2) e='M';
		if (b==3) e='s';
		if (b==4) e='U';
	}
	if (a==1){
		d='v';
		if (b==0) e='A';
		if (b==1) e='B';
		if (b==2) e='P';
		if (b==3) e='F';
		if (b==4) e='Y';
	}
	if (a==2){
		d='m';
		if (b==0) e='c';
		if (b==1) e='b';
		if (b==2) e='z';
		if (b==3) e='d';
		if (b==4) e='l';
	}
	if (a==3){
		d='h';
		if (b==0) e='z';
		if (b==1) e='s';
		if (b==2) e='k';
		if (b==3) e='m';
		if (b==4) e='k';
	}
	if (a==4){
		d='l';
		if (b==0) e='P';
		if (b==1) e='v';
		if (b==2) e='r';
		if (b==3) e='s';
		if (b==4) e='m';
	}

	if (c==0) f='p';
	if (c==1) f='c';
	if (c==2) f='z';
	if (c==3) f='n';
	if (c==4) f='b';

	string pom;
	pom += d;
	pom += e;
	pom += f;
	return pom;
}


void upis (stog* st){
	int upisi, slucaj, slucaj2, slucaj3;
	vlak ukrcaj;
	cout<<"koliko proizvoda zelis upisati?: ";
	cin>>upisi;
	for (int i=0;i<upisi;i++){
				slucaj2=rand()%5;
				if(slucaj2==0){
					strcpy(ukrcaj.vrsta, vrsta[0].c_str() );
					cout<<"---vrsta je tehnika"<<endl;
					slucaj=rand()%5;
					if(slucaj==0){	strcpy(ukrcaj.model, model_tehnika[0].c_str() ); cout<<"---model je frizider"<<endl;}
					if(slucaj==1){	strcpy(ukrcaj.model, model_tehnika[1].c_str() ); cout<<"---model je mobitel"<<endl;}
					if(slucaj==2){	strcpy(ukrcaj.model, model_tehnika[2].c_str() ); cout<<"---model je MP3-player"<<endl;}
					if(slucaj==3){	strcpy(ukrcaj.model, model_tehnika[3].c_str() ); cout<<"---model su slusalice"<<endl;}
					if(slucaj==4){	strcpy(ukrcaj.model, model_tehnika[4].c_str() ); cout<<"---model je USB-stick"<<endl;}
				}
				if(slucaj2==1){
					strcpy(ukrcaj.vrsta, vrsta[1].c_str() );
					cout<<"---vrsta su vozila"<<endl;
					slucaj=rand()%5;
					if(slucaj==0){	strcpy(ukrcaj.model, model_vozila[0].c_str() ); cout<<"---model je Audi"<<endl;}
					if(slucaj==1){	strcpy(ukrcaj.model, model_vozila[1].c_str() ); cout<<"---model je BMW"<<endl;}
					if(slucaj==2){	strcpy(ukrcaj.model, model_vozila[2].c_str() ); cout<<"---model je Porsche"<<endl;}
					if(slucaj==3){	strcpy(ukrcaj.model, model_vozila[3].c_str() ); cout<<"---model je Fiat"<<endl;}
					if(slucaj==4){	strcpy(ukrcaj.model, model_vozila[4].c_str() ); cout<<"---model je Yugo"<<endl;}
				}
				if(slucaj2==2){
					strcpy(ukrcaj.vrsta, vrsta[0].c_str() );
					cout<<"---vrsta su materijali"<<endl;
					slucaj=rand()%5;
					if(slucaj==0){	strcpy(ukrcaj.model, model_materijali[0].c_str() ); cout<<"---model je cement"<<endl;}
					if(slucaj==1){	strcpy(ukrcaj.model, model_materijali[1].c_str() ); cout<<"---model je beton"<<endl;}
					if(slucaj==2){	strcpy(ukrcaj.model, model_materijali[2].c_str() ); cout<<"---model je zemlja"<<endl;}
					if(slucaj==3){	strcpy(ukrcaj.model, model_materijali[3].c_str() ); cout<<"---model je drvo"<<endl;}
					if(slucaj==4){	strcpy(ukrcaj.model, model_materijali[4].c_str() ); cout<<"---model je laminat"<<endl;}
				}
				if(slucaj2==3){
					strcpy(ukrcaj.vrsta, vrsta[1].c_str() );
					cout<<"---vrsta je hrana"<<endl;
					slucaj=rand()%5;
					if(slucaj==0){	strcpy(ukrcaj.model, model_hrana[0].c_str() ); cout<<"---model je zitarice"<<endl;}
					if(slucaj==1){	strcpy(ukrcaj.model, model_hrana[1].c_str() ); cout<<"---model je smoki"<<endl;}
					if(slucaj==2){	strcpy(ukrcaj.model, model_hrana[2].c_str() ); cout<<"---model je kupus"<<endl;}
					if(slucaj==3){	strcpy(ukrcaj.model, model_hrana[3].c_str() ); cout<<"---model je meso"<<endl;}
					if(slucaj==4){	strcpy(ukrcaj.model, model_hrana[4].c_str() ); cout<<"---model je kruh"<<endl;}
				}
				if(slucaj2==4){
					strcpy(ukrcaj.vrsta, vrsta[1].c_str() );
					cout<<"---vrsta je tekucina"<<endl;
					slucaj=rand()%5;
					if(slucaj==0){	strcpy(ukrcaj.model, model_tekucine[0].c_str() ); cout<<"---model je Pan"<<endl;}
					if(slucaj==1){	strcpy(ukrcaj.model, model_tekucine[1].c_str() ); cout<<"---model je vodka"<<endl;}
					if(slucaj==2){	strcpy(ukrcaj.model, model_tekucine[2].c_str() ); cout<<"---model je rakija"<<endl;}
					if(slucaj==3){	strcpy(ukrcaj.model, model_tekucine[3].c_str() ); cout<<"---model je sok"<<endl;}
					if(slucaj==4){	strcpy(ukrcaj.model, model_tekucine[4].c_str() ); cout<<"---model je mlijeko"<<endl;}
				}

				slucaj3=rand()%5;
				if(slucaj3==0){	strcpy(ukrcaj.boja, boje[0].c_str() ); cout<<"---boja je plava"<<endl;}
				if(slucaj3==1){	strcpy(ukrcaj.boja, boje[1].c_str() ); cout<<"---boja je crvena"<<endl;}
				if(slucaj3==2){	strcpy(ukrcaj.boja, boje[2].c_str() ); cout<<"---boja je zelena"<<endl;}
				if(slucaj3==3){	strcpy(ukrcaj.boja, boje[3].c_str() ); cout<<"---boja je narancasta"<<endl;}
				if(slucaj3==4){	strcpy(ukrcaj.boja, boje[4].c_str() ); cout<<"---boja je bijela"<<endl;}

				cout<<"upisi cijenu: ";
				cin>>ukrcaj.cijena;

				cout<<"upisi datum(GGGGMMDD): ";
				cin>>ukrcaj.datum;
				cout<<endl<<endl;

				strcpy(ukrcaj.sifra, sifra(slucaj2, slucaj, slucaj3).c_str() );

				cout<<"sifra: "<<ukrcaj.sifra<<endl;

				PushS(ukrcaj, st);

				}

}

vlak prebaci(stog* st1, stog* st2) {
	vlak pom = TopS(st1);
	PopS(st1);
	PushS(pom, st2);
	return pom;
}

void ispis(stog* st) {
	stog* st2 = new stog;
	InitS(st2);
	while(IsEmptyS(st)==1) {
		prebaci(st, st2);
	}
	while(IsEmptyS(st2)==1) {
		vlak pom = prebaci(st2, st);
		cout<<"vrsta: "<<pom.vrsta<<endl<<"model: "<<pom.model<<endl<<"boja: "<<pom.boja<<endl<<"cijena: "<<pom.cijena<<endl<<"sifra: "<<pom.sifra<<endl<<"datum: "<<pom.datum<<endl<<endl;
	}
	delete st2;
}


void stanica1 (stog* st){
	if(IsEmptyS(st)==0) return;
	stog* st2= new stog;
	InitS(st2);
	char sif[4];
	float cij;
	vlak pom = TopS(st);
	strcpy(sif, pom.sifra);
	cij=pom.cijena;

	while (IsEmptyS(st)==1){
		pom=TopS(st);
		PopS(st);
		if(pom.cijena<cij){
			cij=pom.cijena;
			strcpy(sif, pom.sifra);
		}
		PushS(pom, st2);
	}

	while (IsEmptyS(st2)==1){
		pom=TopS(st2);
		PopS(st2);
		if(strcmp(pom.sifra, sif)==0){
			cout<<endl<<"roba s najmanjom cijenom je: "<<endl<<"--------------------" <<endl<<"vrsta: "<<pom.vrsta<<endl<<"model: "<<pom.model<<endl<<"boja: "<<pom.boja<<endl<<"cijena: "<<pom.cijena<<endl<<"sifra: "<<pom.sifra<<endl<<"datum: "<<pom.datum<<endl<<endl;
		}
		else PushS(pom, st);
	}

	cout<<endl<<"stanje u vlaku nakon prve stanice: "<<endl;
	ispis(st);
	delete st2;


}

void stanica2(stog* st){
	if(IsEmptyS(st)==0) return;
	vlak pom;
	pom=TopS(st);
	PopS(st);
	stanica2(st);
	if(pom.cijena >5000 && strcmp(pom.boja, "zelena")==0 && pom.datum >20130823 &&pom.datum < 20131123){
		cout<<"Treba iskrcati: "<<endl<<"--------------------" <<endl<<"vrsta: "<<pom.vrsta<<endl<<"model: "<<pom.model<<endl<<"boja: "<<pom.boja<<endl<<"cijena: "<<pom.cijena<<endl<<"sifra: "<<pom.sifra<<endl<<"datum: "<<pom.datum<<endl<<endl;
	}
	else PushS(pom, st);
}

int main(){

	int izbor;
	stog* st=new stog;
	InitS(st);
	srand(time(0));

	do {
		cout << "IZBORNIK" << endl;
		cout << "1 - upis" << endl;
		cout << "2 - stanica 1" << endl;
		cout << "3 - stanica 2" << endl;
		cout << "4 - vlak" << endl;
		cout << "0 - Izlaz" << endl;
		cin >> izbor;
		switch(izbor) {
		case 1:
			cout << "--------------------" << endl << "upis:" << endl;
			upis(st);
			break;
		case 2:
			cout << "--------------------" << endl << "stanica 1:" << endl;
			stanica1(st);
			break;
		case 3:
			cout << "--------------------" << endl << "stanica 2:" << endl;
			stanica2(st);
			cout << "--------------------" << endl << "stanje nakon druge stanice:" <<endl<<"--------------------" << endl;
			ispis(st);
			break;
		case 4:
			cout << "--------------------" << endl << "stanje u vlaku:" <<endl<<"--------------------" << endl;
			ispis(st);
			break;
		case 0:
			break;
		default:
			cout << "pogresan unos" << endl;
			break; }
	} while(izbor != 0);

	return 0;
}