#include<stdio.h>
#include<stdlib.h>

#include<conio.h>
#include<string.h>
#include<ctype.h>


///Peter Binamira
///peter@philskies.net

typedef struct FSIM r;
typedef struct ACARS l;

void DIR();
void FPLAN(l);
void NARROWS(l);
void JUNCTION(l);
void TIMO(l);
void FLAGS(l);

/////////

struct FSIM
{
int colin;
char wypt[20];
char vor[20];
char os[20];
struct FSIM *next;
}
;

struct ACARS
{
struct FSIM *hpt;
struct FSIM *cpt;
struct FSIM *tpt;
}
;

	
int CONFIRMATION(l);
int CHECKLENGTH(l);

l IN(l);
l CREATE(l);
l INSERT(l);
l DELETE(l);
r *INPUT(l);
r *INPUT2(l);
r *TRAVEL(l);
r *TRAVEL2(l, int);


main()


{
system("color 1f");
int i, opctr=1, flag=0;
char choice, trash;

DIR ();
return 0;
		
}
l IN(l l)
{
l.hpt = NULL;
l.cpt = NULL;
l.tpt = NULL;
return l;
}




void DIR()
{
l l;
l = IN(l);
char m[3];
int x = 0;
while(x != 6 && x >= 0)
{
system("cls");
////////////////////////////////////////////////////////
printf("version xtin-c");	
printf("\n\n* * * * * * * * * * * * MAIN MENU * * * * * * * * * * * ");
printf("\n*                                                     *");
printf("\n*          (1)  ENTER DELA ROSA PARKING LOT           *");
printf("\n*          (2)  INSERT CAR INTO AVAILABLE SLOT        *");
printf("\n*          (3)  EXIT PARKING LOT                      *");
printf("\n*          (4)  SEARCH DELA ROSA PARKING LOT          *");
printf("\n*          (5)  DISPLAY ALL PARKED VEHICLES           *");
printf("\n*          (6)  TERMINATE                             *");
printf("\n*                                                     *");
printf("\n* * * * * * * * * * * * * * * * * * * * * * * * * * * *\n\n");
		
printf("\nPls. ENTER CHOICE (1-6):  ");
	
///////////////////////////////////////////////////
gets (m);
x = atoi(m);
switch (x)
{

case 1:
l = CREATE(l);
printf("\n\n-You have chosen option (1)");
printf("\n\n-ENTER PARKING\n\n");
break;

case 2:
l.tpt = l.hpt;
if(l.hpt == NULL)
{
printf("\n\nNO CAR RECORD YET\n\n");
system("PAUSE");}
		
else
{
l = INSERT(l);
printf("\n\n-You have chosen option (2)");
printf("\n\n-INSERT CAR IN AVAILABLE SLOT\n\n");
}
break;
	//////////////////////////////
case 3:
l.tpt = l.hpt;
if(l.hpt == NULL)

{
printf("\n\nWARNING: Unable to DELETE- NO CAR FOUND\n\n");
break;


}
  
else

{
printf("\n\n-You have chosen option (3)");
printf("\n\nEXIT PARKING LOT\n\n");

l = DELETE(l);
}
break;

///////////////
	
case 4:
l.tpt = l.hpt;
if(l.hpt == NULL)
{	
printf("\n\nWARNING: Unable to SEARCH- NO CAR FOUND\n\n");
system("PAUSE");
}

else{FPLAN(l);
}
break;
		
case 5:
l.tpt = l.hpt;

if(l.hpt == NULL)
{
printf("\n\nWARNING: Unable to list parked cars- NO CAR(s) FOUND\n\n");
system("PAUSE");}

else
{
NARROWS(l);
printf("\n\nLISTING ALL CARS\n\n");
}

break;

case 6:
exit(0);
		
default:
printf("\n\nPROCESSING ENTRY...\n\n");
system("PAUSE");
}}}

void FPLAN(l l)
{
char m[3];
int x = 0;
while(x != 3 && x >= 0)
{
printf("\n\n///////////////");
printf("\n\nSEARCH SUBMENU\n");
printf("\n\n(1) SEARCH BY PLATE NUMBER");
printf("\n(2) SEARCH BY DATE");
printf("\n(3) BACK TO MAIN MENU\n\n");
printf("\n\nENTER CHOICE: (1-3): ");
gets (m);
/////////////
x=atoi(m);
//////////////
switch (x)
{
case 1:
system("cls");
TIMO(l);
printf("\n\nSEARCHING BY PLATE NUMBER\n\n");
break;

case 2:
system("cls");
FLAGS(l);
printf("\n\nSEARCHING BY DATE\n\n");
break;
	
case 3:
break;
default:
printf("\n\nINVALID CHOICE\n\n");
system("PAUSE");

}
}
}
//////////////////////////////
void NARROWS(l l)
{
int m = 1;
while(l.tpt != NULL)
{
printf("\nCar Entry number: %d", m);
printf("\n\nParking Slot: %d", l.tpt->colin);
printf("\nVehicle Model: %s", l.tpt->wypt);
printf("\nPlate Number: %s", l.tpt->vor);
printf("\nDate in mm/dd/yy format: %s\n\n", l.tpt->os);
l.tpt = l.tpt->next;
system("PAUSE");
m++;
}
}

void JUNCTION(l l)
{
printf("\n\nParking Slot: %d", l.tpt->colin);
printf("\nVehicle Model: %s", l.tpt->wypt);
printf("\nPlate Number: %s", l.tpt->vor);
printf("\nDate in mm/dd/yy format: %s\n\n", l.tpt->os);
system("PAUSE");
}
/////////////////////////////////////
void TIMO(l l)
{
char ndb[20];
l.tpt = l.hpt;
printf("\nEnter plate number: ");
scanf("%s", ndb);
while(l.tpt != NULL)
{
if(strcmp(l.tpt->vor, ndb) == 0)
{
JUNCTION(l);
l.tpt = l.tpt -> next;
}
else
{
l.tpt = l.tpt -> next;
}
}
printf("\nNO CAR FOUND");
}

void FLAGS(l l)
{
char console2[20];
l.tpt = l.hpt;
printf("\nENTER DATE in mm/dd/yy format: ");
scanf("%s", console2);
while(l.tpt != NULL)
{
if(strcmp(l.tpt->os, console2) == 0)
{
JUNCTION(l);
l.tpt = l.tpt -> next;
}
else
{
l.tpt = l.tpt -> next;
}
}
printf("\nNO CAR IN PARKING SLOT!");
}

int CHECKLENGTH(l l)
{
int m = 1;
while(l.tpt != NULL)
{
m  = m + 1;
l.tpt = l.tpt -> next;
}
return m;
}

int CONFIRMATION(l l)
{
l.tpt = l.hpt;
while(l.tpt != NULL)
{
if(l.tpt -> colin == l.cpt -> colin)
{
printf("\nPARKING SLOT ALREADY OCCUPIED! Please choose another slot:\n\n");
system("PAUSE");
return 0;
}
l.tpt = l.tpt -> next;
}
return 1;
}

l CREATE(l l)
{
l.tpt = l.cpt;
if(l.hpt == NULL)
{
l.cpt=(r*)malloc(sizeof(r));
l.cpt = INPUT(l);
l.hpt = l.cpt;
l.cpt->next = NULL;
}
else
{
l.tpt = l.hpt;
l.tpt =  TRAVEL(l);
l.cpt=(r*)malloc(sizeof(r));
l.cpt = INPUT2(l);
l.cpt -> next = NULL;
l.tpt -> next = l.cpt;
l.tpt = l.cpt;
}
return l;
}

l INSERT(l l)
{
int c, m;
NARROWS(l);
printf("\n\nENTER PARKING SLOT TO BE INSERTED: ");
scanf("%d", &c);
m = CHECKLENGTH(l) + 10;   //default 1

if(c < 1 || c > m)
{
printf("\nUNABLE TO PROCESS DUE TO INVALID NUMBER");
printf("\n   Choose from 1 to %d", m);
}
else
{
if(c == 1)
{
l.cpt=(r*)malloc(sizeof(r));
l.cpt = INPUT2(l);
l.cpt -> next = l.hpt;
l.hpt = l.cpt;
}
else
{
l.tpt = TRAVEL2(l, c - 1);
l.cpt=(r*)malloc(sizeof(r));
l.cpt = INPUT2(l);
l.cpt -> next = l.tpt -> next;
l.tpt -> next = l.cpt;
}
}
return l;
}

l DELETE(l l)
{
int m;
NARROWS(l);
l.tpt = l.hpt;
if(l.hpt != NULL)
{
printf("\n\nENTER VEHICLE MODEL TO DELETE: ");
scanf("%d", &m);
if(m == 1)
{
l.cpt = l.hpt;
l.hpt = l.cpt -> next;
l.cpt -> next = NULL;
free(l.cpt);
}
else
{
l.tpt = TRAVEL2(l, m - 1);
l.cpt = l.tpt -> next;
l.tpt -> next = l.tpt -> next -> next;
l.cpt -> next = NULL;
free(l.cpt);
}
}
return l;
}

r *INPUT(l l)
{
printf("\nEnter Parking Slot: ");
scanf("%d", &l.cpt->colin);
printf("\nEnter Vehicle Model: ");
scanf("%s", l.cpt->wypt);
printf("\nEnter Plate Number: ");
scanf("%s", l.cpt->vor);
printf("\nEnter Date in mm/dd/yy format: ");  ////testing!
scanf("%s", l.cpt->os);
return l.cpt;
}

r *INPUT2(l l)
{
int m;
do{
printf("\nENTER PARKING SLOT: ");
scanf("%d", &l.cpt->colin);
m = CONFIRMATION(l);
}

while(m == 0); 
printf("\nENTER VEHICLE MODEL: ");
scanf("%s", l.cpt->wypt);
printf("\nENTER PLATE NUMBER: ");
scanf("%s", l.cpt->vor);
printf("\nENTER DATE in mm/dd/y format: ");
scanf("%s", l.cpt->os);

return l.cpt;
}

r *TRAVEL(l l)
{
while (l.tpt -> next != NULL)
{
l.tpt = l.tpt -> next;
}
return l.tpt;
}

r *TRAVEL2(l l, int m)
{
l.tpt = l.hpt;
for(int i = 1; i < m; i++)

{
l.tpt = l.tpt -> next;
}
return l.tpt;
}
//system("PAUSE");}

