/*
 Una stazione termale offre tre terapie: fanghi, lampade e inalazioni.
 Le clienti donne possono chiedere solo fanghi e lampade.
 I clienti uomini possono chiedere solo lampade e inalazioni.
 Dato il costo di ciascun tipo di prestazione (fanghi, lampade, inalazioni)
 e generata casualmente una comitiva mista di dieci amici si vuole sapere quanto costerà
 complessivamente il loro trattamento termale.
*/
public class Terme {
  
  public static void main(String args[]) {
    Cliente[] comitiva = new Cliente[10];
    for (int c=0; c<comitiva.length; c++)
      if (Math.random()>.5) comitiva[c] = new Uomo();
      else comitiva[c] = new Donna();
    //costo
    float costo=0;
    for (int c=0; c<comitiva.length; c++) {
      costo += comitiva[c].getCosto();
      System.out.println(comitiva[c]);
    }
    System.out.println("Spesa amici: "+costo);
  }
}

interface terapie {
  public static final float[] costi = {10.0F, 12.50F, 13.50F};
  public static final String[] nomi = {"Fanghi", "Lampade", "Inalazioni"};
}


abstract class Cliente implements terapie {
  protected boolean[] myterapie = {false, false, false};
  //membro concreto
  public float getCosto() {
    float costo=0;
    for (int c=0; c<myterapie.length; c++)
      if (myterapie[c]==true) costo += costi[c];
    return costo;
  }
}

class Donna extends Cliente {
  //costruttore
  public Donna() {
    do {
      myterapie[0] = (Math.random()>.5)? true : false;
      myterapie[1] = (Math.random()>.5)? true : false;
    } while (myterapie[0]==false && myterapie[1]==false);
  }
  //overridden
  public String toString() {
    return "Donna con "+((myterapie[0])? nomi[0] : "") +  
                       ((myterapie[1])? " "+nomi[1] : "");
  }
}

class Uomo extends Cliente {
  //costruttore
  public Uomo() {
    do {
      myterapie[1] = (Math.random()>.5)? true : false;
      myterapie[2] = (Math.random()>.5)? true : false;
    } while (myterapie[1]==false && myterapie[2]==false);
  }
  //overridden
  public String toString() {
    return "Uomo con "+((myterapie[1])? nomi[1] : "") +  
                       ((myterapie[2])? " "+nomi[2] : "");
  }
}