#include <stdio.h>

#define MAX_JUG 10
#define MAX_CAR 20

typedef struct{
	int dia;
	int mes;
	int anyo;
} t_fecha;

typedef struct{
	char nombre[MAX_CAR]; //Nombre del jugador
	int edad; //Edad del jugador
	int goles; //Goles marcados por jugador
	t_fecha fecha; //Fecha de incorporacion al equipo
} t_jugador;

typedef struct{
	char equipo[MAX_CAR]; //Nombre del equipo
	int num; //Numero de jugadores actuales
	t_jugador lista[MAX_JUG]; //Lista jugadores del equipo
} t_equipo;

void mostrar_fecha(t_fecha f) {
	printf("%02d %02d %04d\n", f.dia, f.mes, f.anyo);
}

void mostrar_jugador(t_jugador j) {
	int i;

	for(i=0;j.nombre[i]!='.';i++) {
		printf("%c", j.nombre[i]);
	}
	printf(".:%d:%d:", j.edad, j.goles);
	mostrar_fecha(j.fecha);
}

void mostrar_equipo(t_equipo e) {
	int i;

	for(i=0;e.equipo[i]!='.';i++) {
		printf("%c", e.equipo[i]);
	}
	printf(".:%d\n", e.num);
	for(i=0;i<e.num;i++) {
		mostrar_jugador(e.lista[i]);
	}
}

/*
 * mostrar_equipo2() hace lo mismo que mostrar_equipo()
 * pero sin invocar a otras funciones.
 * Lo pongo para que veais cosas como "e.lista[i].fecha.mes".
 */

void mostrar_equipo2(t_equipo e) {
	int i, j;

	for(i=0;e.equipo[i]!='.';i++) {
		printf("%c", e.equipo[i]);
	}
	printf(".:%d\n", e.num);
	for(i=0;i<e.num;i++) {
		for(j=0;e.lista[i].nombre[j]!='.';j++) {
			printf("%c", e.lista[i].nombre[j]);
		}
		printf(".:%d:%d:", e.lista[i].edad, e.lista[i].goles);
		printf("%02d %02d %04d\n", e.lista[i].fecha.dia,
			e.lista[i].fecha.mes, e.lista[i].fecha.anyo);
	}
}

void leer_fecha(t_fecha *p_f) {
	scanf("%d %d %d%*c", &p_f->dia, &p_f->mes, &p_f->anyo);
	// "%*c" elimina el '\n' del buffer de entrada
}

void leer_jugador(t_jugador *p_j) {
	int i;
	char c='\0';
	for(i=0;c!='.';i++) {
		scanf("%c", &c);
		p_j->nombre[i] = c;
	}
	scanf(":%d:%d:", &p_j->edad, &p_j->goles);
	leer_fecha(&p_j->fecha);
}

void leer_equipo(t_equipo *p_e) {
	int i; char c='\0';
	
	for(i=0;c!='.';i++) {
		scanf("%c", &c);
		p_e->equipo[i] = c;
	}
	scanf(":%d%*c", &p_e->num);
	// "%*c" elimina el '\n' del buffer de entrada
	for(i=0;i<p_e->num;i++) {
		leer_jugador(&p_e->lista[i]);
	}
}

/*
 * leer_equipo2() hace lo mismo que leer_equipo()
 * pero sin invocar a otras funciones.
 * sirve para que veais cosas que es "&p_e->lista[i].fecha.mes"
 * y no "&p_e->lista[i]->fecha->mes"
 */

void leer_equipo2(t_equipo *p_e) {
	int i, j;
	char c;
	
	for(i=0, c='\0';c!='.';i++) {
		scanf("%c", &c);
		p_e->equipo[i] = c;
	}
	scanf(":%d%*c", &p_e->num);
	for(i=0;i<p_e->num;i++) {
		for(j=0,c='\0';c!='.';j++) {
			scanf("%c", &c);
			p_e->lista[i].nombre[j] = c;
		}
		scanf(":%d:%d:%d %d %d%*c", &p_e->lista[i].edad,
			&p_e->lista[i].goles, &p_e->lista[i].fecha.dia,
			&p_e->lista[i].fecha.mes, &p_e->lista[i].fecha.anyo);
	}
}

main() {
	t_fecha f = {1,7,1998};
	t_jugador j = {"Xavi.",32,13,{1,7,1998}};
	t_equipo eq = {"Barza.", 3, {
		{"Xavi.",32,13,{1,7,1998}},
		{"Messi.",24,58,{1,7,2004}},
		{"Pujol.",33,3,{1,7,1999}}}};

//	leer_fecha(&f);
//	mostrar_fecha(f);
//	leer_jugador(&j);
//	mostrar_jugador(j);

	printf("MUESTRO EQUIPO:\n");
	mostrar_equipo(eq);
	printf("LEO EQUIPO CON EL MISMO FORMATO:\n");
	leer_equipo(&eq);
	printf("MUESTRO EQUIPO:\n");
	mostrar_equipo(eq);

	printf("LEO EQUIPO CON EL MISMO FORMATO:\n");
	leer_equipo2(&eq);
	printf("MUESTRO EQUIPO:\n");
	mostrar_equipo2(eq);
}

/*
 * ""scanf("\n");"" antes hacer ""scanf("%c", &c);"" donde sospechamos que
 * puede haver un '\n' que no queremos leer, eliminara todos los ' ' y '\n'
 * del buffer de entrada.
 * La alternativa es hacer un ""scanf("%*c");"" cada vez que sepamos que el
 * usuario introduce un retorno de carro. (En este caso al final del numero
 * de jugadores y de los anyos de incorporacion de cada jugador).
 */

