/*
In una salumeria si confezionano pacchi regalo di tre tipi:
uno con salami e prosciutti, uno con salami e frutta secca e uno con prosciutto e frutta secca.
Per ogni specialità (salame, prosciutto o frutta secca) in ciascun pacco viene fatta una pesata
e il costo del cesto è determinato una volta che siano fissati i prezzi al chilogrammo dei tre alimenti.
*/
public class Salumeria {
  
  //Il programma inizia con una chiamata al metodo main().
  public static void main(String args[]) {
    Pacco[] pacchi = new Pacco[10];
    double cas;
    for (int c=0; c<pacchi.length; c++) {
      cas = Math.random();
      if (cas<.3) pacchi[c] = new pacco1();
      else if (cas<.6) pacchi[c] = new pacco2();  
      else pacchi[c] = new pacco3();
      System.out.println("Creato " + pacchi[c]);
    }
    //Quale costa di più?
    float max=0; int index=0;
    for (int c=0; c<pacchi.length; c++)
      if (pacchi[c].getCosto()>max) {
        max=pacchi[c].getCosto();
        index = c;
      }
    System.out.println("Pacco piu' costoso: "+pacchi[index] + ", che costa " + max);

  }
}

interface specie {
  public static final String[] alimenti = {"Salame", "Prosciutto", "Frutta secca"};
  public static final float[] costi = {5.0F, 12.0F, .5F};
}

abstract class Pacco implements specie {
  //variab. di istanza
  protected float[] pesoalimenti = {0.0F, 0.0F, 0.0F};
  //metodo concreto
  public float getCosto() {
    float totale = 0.0F;
    for (int c=0; c<pesoalimenti.length; c++)
      if (pesoalimenti[c] != 0.0F) totale += pesoalimenti[c] * costi[c];
    return (float)((int)(totale*100))/100;
  }

  public float getPeso() {
    float totale = 0.0F;
    for (int c=0; c<pesoalimenti.length; c++)
      if (pesoalimenti[c] != 0.0F) totale += pesoalimenti[c];
    return (float)((int)(totale*100))/100;
  }
  
}

class pacco1 extends Pacco {
  //costruttore
  public pacco1() {
    pesoalimenti[0] = (float)(Math.random()*2.0F + .1F);
    pesoalimenti[1] = (float)(Math.random()*2.0F + .1F);
  }
  //overridden
  public String toString() {
    return "Tipo: " + alimenti[0] + " e " + alimenti[1] + ". Peso " + getPeso() + "Kg";
  }
}

class pacco2 extends Pacco {
  //costruttore
  public pacco2() {
    pesoalimenti[0] = (float)(Math.random()*2.0F + .1F);
    pesoalimenti[2] = (float)(Math.random()*2.0F + .1F);
  }
  //overridden
  public String toString() {
    return "Tipo: " + alimenti[0] + " e " + alimenti[2] + ". Peso " + getPeso() + "Kg";
  }
}

class pacco3 extends Pacco {
  //costruttore
  public pacco3() {
    pesoalimenti[1] = (float)(Math.random()*2.0F + .1F);
    pesoalimenti[2] = (float)(Math.random()*2.0F + .1F);
  }
  //overridden
  public String toString() {
    return "Tipo: " + alimenti[1] + " e " + alimenti[2] + ". Peso " + getPeso() + "Kg";
  }
}