#include "stdio.h"
#include "stdlib.h"
#include "string.h"
#include "math.h"

typedef struct {
	int size;
	int id;
	int tip;
	
	float x1;
	float x2;
	float y1;
	float y2;
}blocks;
float totaLength(blocks bA , blocks bB , blocks bC);
int main() {
	
	blocks *block1 , *block2 , *block3;
	char line[60];
	int blcNum=1, sizer=0, temp;
	block1 = malloc( sizeof(blocks) );
	block2 = malloc( sizeof(blocks) );
	block3 = malloc( sizeof(blocks) );
	
	FILE *fp;
	fp = fopen("IEEE_test_system_12.txt","r");
	
	// block's size calculator and memory allocator ;
	while(!feof(fp)){
		fgets(line,60,fp);
		
			if ( strstr(line,"\0") != NULL && strstr(line,"ID") == NULL && strstr(line,"END") == NULL ) {
			sizer++;
			printf(line); 
			}
			else if ( strstr(line,"END") != NULL ){
				
				if ( blcNum == 1){
					block1->size = sizer;
					blcNum++;
					sizer = 0;
				}
				else if ( blcNum == 2){
					block2->size = sizer;
					blcNum++;
					sizer = 0;
				}
				else if ( blcNum == 3){
					block3->size = sizer;
					blcNum++;
					sizer = 0;
				}
				
			}	
	block1 = realloc(block1 , block1->size * sizeof(blocks));
	block2 = realloc(block2 , block2->size * sizeof(blocks));
	block3 = realloc(block3 , block3->size * sizeof(blocks));
	};
    fclose(fp);
    line == NULL;
    blcNum=1;
    // MISSION COMPLETED STRUCTURES HAVE ALLOCATED WITH THEIR SIZES.
    
    // NOW START TO GET VALUES AND PUT THEM IN STRUCTS
    fp = fopen("IEEE_test_system_12.txt","r");
    //*
    for ( temp =0 ; temp < block1->size ; ++temp)
    {
    	while(!feof(fp)){
    		fgets(line,60,fp);
    		if (  strstr(line,"ID") == NULL && strstr(line,"END") == NULL && strstr(line,"\0") != NULL)
    		{
    			if ( blcNum == 1){
    				fscanf(fp,"%d %.2f %.2f",&(block1+temp)->id,&(block1+temp)->x1,&(block1+temp)->y1);
				}
				else if ( blcNum == 2){
					fscanf(fp,"%d %d %.2f %.2f %.2f %.2f",&(block2+temp)->id,&(block2+temp)->tip,
					                                      &(block2+temp)->x1,&(block2+temp)->y1,
														  &(block2+temp)->x2,&(block2+temp)->y2);
				}
				else if ( blcNum == 3){
					fscanf(fp,"%d %.2f %.2f %.2f %.2f",&(block3+temp)->id,&(block3+temp)->x1,
													   &(block3+temp)->y1,&(block3+temp)->x2,
					                                                      &(block3+temp)->y2);
				}
			}
			else if ( strstr(line,"END") != NULL ){
				
					blcNum++;
				
			}
		}
	}
	fclose(fp);
   // */
   
   // DISPLAYING INFORMATION 
   printf("\n\n\n");
   printf("**********************************\n");
   printf("**********************************\n");
   printf("******Displaying Information******\n");
   printf("**********************************\n");
   printf("**********************************\n\n\n");
   
   
   printf("\nUploader's information : \n");
   for (temp =0; temp < block1->size ; ++temp)
   {
   	printf(" id : %d , X1 : %.2f , Y1 : %.2f  \n",(block1+temp)->id,(block1+temp)->x1,(block1+temp)->y1);
   }
   printf("\ncustomer's information : \n");
   for (temp =0; temp < block2->size ; ++temp)
   {
   	printf(" id : %d , tip : %d , X1 : %.2f , Y1 : %.2f , X2 : %.2f , Y2 : %.2f \n",(block2+temp)->id,(block2+temp)->tip,(block2+temp)->x1,
	                                                                                (block2+temp)->y1,(block2+temp)->x2,(block2+temp)->y2);
   }
   printf("\nLine's information : \n");
   for (temp =0; temp < block3->size ; ++temp)
   {
   	printf(" id : %d , X1 : %.2f , Y1 : %.2f , X2 : %.2f , Y2 : %.2f \n",(block2+temp)->id,(block2+temp)->x1,
	                                                                     (block2+temp)->y1,(block2+temp)->x2,(block2+temp)->y2);
   }
    
    printf("\nsizer : %d",sizer);
	printf("\nblcNum : %d ",blcNum);
	printf("\n1 . block's size : %d ",block1->size);
	printf("\n2 . block's size : %d ",block2->size);
	printf("\n3 . block's size : %d ",block3->size);
	
	/* USER MENU 
	
	printf("\n\n\nWelcome To City Draft Center !");
	
	int broken = 0, selection; 
	while (!broken) 
	{
		printf("\n Please put a number what you want to select ...\n");
		printf(" \nTo see total Line length and Line number (1)");
		printf(" \nTo see total Customer number and Customer number by type (2)");
		printf(" \nTo see a any Line's id and its coordinates (3)");
		printf(" \nTo see a any Customer's id and its coordinates (4)");
		printf(" \nTo see a Uploader's id and its coordinates (5)");
		printf("\nExit (0)\n\n");
		
		scanf("%d",&selection);
		switch ( selection ) 
			{
				case 1 :  
					break;
				case 2 :
					break;
				case 3 :	
					break;
				case 4 :
					break;
				case 5 :
					break;
				case 0 : broken = 1;
					break;		
			}
	}
	*/
	
	
	
	free(block1);
	free(block2);
	free(block3);
	return 0;
}
float totaLength(blocks bA , blocks bB , blocks bC)
				{
					
					return 0;
				};

