#if ! defined MAIN_H
#define MAIN_H

#include "grafo.h"
#include "listamolecole.h"
#include "listaatomi.h"
#include "definizioni.h"

//PROTOTIPI
void carica_dati(grafo_t * grafo, const char * filedati);
// passa una riga alla volta del file per sistemarla
void carica_atomo(grafo_t * grafo, unsigned int numero_atomo, elemento_t tipo_atomo, 
                                        tipomolecola_t tipo_molecola, unsigned int numero_molecola,
                                     float posx, float posy, float posz, float altro1, 
                                 float altro2);


typedef enum tipo_output_s {PDB,SHORT} tipo_output_t;


// Prende il puntatore all'atomo e lo appende nella lista degli atomi della molecola
void inserisci_atomo(atomo_t * atomo, molecola_t * molecola);

// funzioni per convertire gli enumerativi in stringhe e viceversa
tipomolecola_t converti_smolecolatoe(char * stringa);
elemento_t converti_satomotoe(char * stringa);

// converte l'enumerativo tipo_cluster e lo mette nella stringa passata
void converti_eclustertos(tipo_cluster_t tipo_cluster, char * str_tipo_cluster);

// Stampa output short
// TOTALE cluster trovati, classi: {SOLVENTE, SOLUTO, MISTO}
// 1 2 n >n per ogni classe
void stampa_short(grafo_t * grafo, unsigned int numero_classi);
// stampail file .pdb con gli atomi ordinati per cluster
void stampa_pdb(grafo_t * grafo);
// Stampa l'Header del .pdb: per ogni cluster stampa le informazioni con REMARK
void stampa_pdb_infocluster(grafo_t * listacluster);
// Stampa .pdb atomo
void stampa_pdb_atomo ( atomo_t * atomo, unsigned int nuovo_id_molecola, char * str_tipo_molecola);

// funzione che carica i parametri dal file ./simolecole.conf
void load_parameters(char * file_parametri);

// funzione che stampa l'interfaccia del progetto e informazioni relative
void stampa_usage(void);

#endif