/*! \file Strutture dati per un micro social network */
#ifndef LIGHTBOOK_H
#define LIGHTBOOK_H

#define MAX 50

typedef struct _person {
    char *name;
    char *surname;
    struct _person *next;
    int nfriends;
    struct _person *friends[MAX];
    int visited; /*!< Marca usata per le visite */
} person;

person *insert_person(person *list, char *name, char *surname);

person *delete_person(person *list, char *name, char *surname);

int insert_friend(person *p1, person *p2);

int remove_friend(person *p1, person *p2);

/*! \brief Trova la struttura dati corrispondente ad un individuo 
 * \param list  la lista delle persone nella quale si esegue la
 *              ricerca.
 * \param name  il nome della persona cercata
 * \param surname   il cognome della persona cercata
 * \returns     l'indirizzo della struttura dati corrispondente
 * */
person *search(person *list, char *name, char *surname);

/*! \brief ordina la lista 
 * \param list  la lista da ordinare
 * \returns     la lista ordinata
 * */
person *sort(person *list);

void print(person *list);

/*! \brief Stampa tutti gli amici, amici degli amici, etc. 
 * \param p     la persona di cui si vuole stampare la relazione
 *              di amicizia.
 * */
void print_relation(person *p);

void reset_visit(person *list);

#endif /* LIGHTBOOK_H */
