/**
 * Infrastruttura, ha nome e tipo (e' previsto un insieme
 * predefinito di tipi), si trova in un certo segmento di via
 * e in un certo numero civico al suo interno di tale via.
 */
public class Infrastruttura implements EntitaConNome
{
  /** Tipo di infrastruttura ospedale. */
  public static final int OSPEDALE = 1;
  /** Tipo di infrastruttura ospedale. */
  public static final int MUSEO = 2;
  /** Tipo di infrastruttura ospedale. */
  public static final int UNIVERSITA = 3;
  /** Tipo di infrastruttura universitaria". */
  public static final int CINEMA = 4;
  /** Tipo di infrastruttura teatro. */
  public static final int TEATRO = 5;
  /** Tipo di infrastruttura teatro. */
  public static final int SCUOLA = 6;
  /** Tipo di infrastruttura teatro. */
  public static final int UFFICIO_POSTALE = 7;
        
  /** Nome di questa infrastruttura. */ protected String nome;
  /** Segmento di via in cui si trova. */protected SegmentoVia segVia;
  /** Numero civico nella via in cui si trova. */ protected int numero;
  /** Tipo di infrastruttura. */ protected int tipo;

  /** Ritorna il nome di questa infrastruttura. */
  public String ilNome() { return nome; }
  /** Cambia il nome di questa infrastruttura. */
  public void cambiaNome(String n) { nome = n; }

  /** Ritorna il tipo di questa infrastruttura. */
  public int ilTipo() { return tipo; }

  /** Ritorna il segmento di via. */
  public SegmentoVia laVia() {  return segVia;  }
  /** Ritorna il numero civico. */
  public int ilNumero() { return numero; }
  /** Assegna il segmento di via e il numero civico. */
  public void cambiaIndirizzo(SegmentoVia sv, int num)
  { 
    segVia = sv; numero = num;
    sv.aggiungi(this); 
  }

  /** Costruisce infrastruttura dato il tipo e il nome,
      per adesso senza indirizzo. */
  public Infrastruttura(int t, String n)
  {  tipo = t; nome = n;  }  

  /** Ritorna una stringa che rappresenta il tipo di infrastruttura,
      se il tipo non e' valido ritorna "TipoErrato". */
  public static String nomeDelTipo(int tipo)
  {
    switch (tipo)
    {
      case Infrastruttura.OSPEDALE: return "Ospedale";
      case Infrastruttura.MUSEO: return "Museo";
      case Infrastruttura.UNIVERSITA: return "Universita'";
      case Infrastruttura.CINEMA: return "Cinema";
      case Infrastruttura.TEATRO: return "Teatro";
      case Infrastruttura.SCUOLA: return "Scuola";
      case Infrastruttura.UFFICIO_POSTALE: return "Ufficio postale";
    }
    return "TipoErrato";
  }
  
  /** Ritorna il tipo di infrastruttura rappresentato dalla stringa,
      se la stringa non rappresenta un tipo ritorna zero. */
  public static int tipoDelNome(String s)
  {
    if (s.compareTo(nomeDelTipo(OSPEDALE))==0) return OSPEDALE;
    if (s.compareTo(nomeDelTipo(MUSEO))==0) return MUSEO;
    if (s.compareTo(nomeDelTipo(UNIVERSITA))==0) return UNIVERSITA;
    if (s.compareTo(nomeDelTipo(CINEMA))==0) return CINEMA;
    if (s.compareTo(nomeDelTipo(TEATRO))==0) return TEATRO;
    if (s.compareTo(nomeDelTipo(SCUOLA))==0) return SCUOLA;
    if (s.compareTo(nomeDelTipo(UFFICIO_POSTALE))==0) return UFFICIO_POSTALE;
    return 0;
  }    
}
