#include <stdio.h>
#include <stdlib.h>

typedef struct{
	int id;
	char name[45];
	int entryYear;
} student;

student* createStudentArray(int numStudents){
	return malloc(numStudents*sizeof(student));
}

void printStudent(student s){
	printf("%d\t%s\t%d\n",s.id,s.name,s.entryYear);	
}

void saveStudents(student *studentArray, int numStudents, char* filename){
	FILE *fp = fopen(filename,"a+");
	if (fp == NULL){
		printf("There's an issue with creating/accessing the file.\n");
		exit(1);
	}
	fwrite(studentArray,sizeof(student),numStudents,fp);
	fclose(fp);
}

student * loadStudents(char *filename, int *nStudents){
	FILE *fp = fopen(filename,"r");
	if (fp == NULL){
		printf("There's an issue with creating/accessing the file.\n");
		exit(1);
	}
	fseek(fp,0,SEEK_END);
	long filesize = ftell(fp);
	int numStudents = filesize/sizeof(student);
	student *studentArray = createStudentArray(numStudents);
	if (studentArray == NULL){
		fprintf(stderr,"...\n");
		exit(1);
	}
	fseek(fp,0,SEEK_SET);
	fread(studentArray,sizeof(student),numStudents,fp);
	fclose(fp);

	*nStudents = numStudents;
	return studentArray;
}

int main (int argc, char **argv) {

	if(argc != 2){
		printf("You need to provide a filename!\n");
		exit(0);
	}

	int i = 0;
	student *studentArray;
	int numStudents;
	studentArray = loadStudents(argv[1], &numStudents);

	if (numStudents != 0){
		for (i=0;i<numStudents;i++){
			printStudent(studentArray[i]);
		}
	}

	free(studentArray);

	printf("Please provide the number of students...\n");
	scanf("%d",&numStudents);
	studentArray = createStudentArray(numStudents);
	if (studentArray == NULL){
		printf("Uh oh...\n");
		exit(1);
	}

	for (i=0;i<numStudents;i++){
		printf("Student's #%d id:\n",i+1);
		scanf("%d",&studentArray[i].id);
		printf("Student's #%d name:\n",i+1);
		scanf("%s",studentArray[i].name);
		printf("Student's #%d year of entry:\n",i+1);
		scanf("%d",&studentArray[i].entryYear);
	}

	saveStudents(studentArray, numStudents, argv[1]);

	free(studentArray);
}








