/*
AUTORE: Manuel Vichi 3^AIN
Esercizio 3 File Binari
*/
#include <stdio.h>
#include <stdbool.h>
#include <string.h>
using namespace std;
typedef struct {
	char nome[20];
	char cognome[20];
	float reddito;
} Persona;
Persona leggiPersona(const char * fileName) {
	Persona persona;
	FILE* file = fopen(fileName, "rb");
	if (file != NULL) {
		Persona persona;
		fread(&persona, sizeof(persona), 1, file);
		fclose(file);
	} else {
		perror("Errore durante l'apertura del file di lettura");
		return persona;
	}
	return persona;
}
int leggiPersone(const char * fileName, Persona persone[], const size_t count) {
	FILE * file = fopen(fileName, "rb");
	if (file != NULL) {
		int read = fread(persone, sizeof(Persona), count, file);
		return read;
	} else {
		perror("Errore durante l'apertura del file di lettura");
		return -1;
	}
	return -1;
}
int scriviPersona(const char * fileName, const Persona persona) {
	FILE * file = fopen(fileName, "wb");
	if (file != NULL) {
		int written = fwrite(&persona, sizeof(persona), 1, file);
		fclose(file);
		return written;
	} else {
		perror("Errore durante l'apertura del file di scrittura");
		return -1;
	}
}
Persona memorizzaPersona(const char nome[], const char cognome[], const float reddito) {
	Persona persona;
	strcpy(persona.nome, nome);
	strcpy(persona.cognome, cognome);
	persona.reddito = reddito;
	return persona;
}
int convertiText(const char * binaryName, const char * textName, const size_t count) {
	FILE* read = fopen(binaryName, "rb");
	FILE* write = fopen(textName, "wt");
	if (read == NULL || write == NULL) {
		perror("Errore durante l'apertura di uno dei file");
		return -1;
	} else {
		Persona buffer[count];
		int written = 0;
		fread(buffer,sizeof(Persona),count,read);
		for (size_t i = 0; i < count; i++) {
			written += fprintf(write,"%s %s %f", buffer[i].nome, buffer[i].cognome, buffer[i].reddito);
		}
		return written;
	}
	return -1;
}
int main(void) {
	Persona persona;
	char file[] = "persona.bin";
	char file2[] = "persona2.bin";
	printf("Dimensione del tipo Persona: %d\n", sizeof(persona));
	persona = memorizzaPersona("Mario", "Rossi", 1350.50);
	printf("Valori scritti su file binario %s: %d\n", file, scriviPersona("persona.bin", persona));
	persona = leggiPersona(file);
	printf("Valori letti dal file binario %s: %s, %s, %f\n", file, persona.nome, persona.cognome, persona.reddito);
	Persona persone[5];
	printf("Numero di valori letti dal file binario %s: %d\n", file2, leggiPersone(file2, persone, 5));
	return 0;
}
