//Corriere: corriere.cpp
#include <stdio.h>
#include <stdlib.h>
#include "corriere.h"

/* I metodi seguenti sono tutti concettualmente uguali:
 * - Richiedono gli attributi per un particolare capo di
 *   vestiario.
 * - Chiedono il numero di capi da inserire
 * - Creano tanti capi con gli attributi indicati, quanti
 *   ne sono richiesti, aggiungendoli alla lista del corriere
 */
void Corriere::AddCravatta ()
{
char Modello [30];
char num [10];
int i,n;
  printf ("Aggiungo Cravatta\nModello :");
  fgets (Modello,29,stdin);
  Modello [30] = 0;
  printf ("Quantita' :");
  fgets (num,9,stdin);
  i = strtol (num,0,0L);
  for (n = 0; n < i; n ++)
    new Capo (cons,"Cravatta",Modello);
}

void Corriere::AddCintura ()
{
char Modello [30];
char Taglia [10];
char num [10];
int i,n;
  printf ("Aggiungo Cintura\nModello :");
  fgets (Modello,29,stdin);
  Modello [30] = 0;
  printf ("Taglia :");
  fgets (Taglia,9,stdin);
  printf ("Quantita' :");
  fgets (num,9,stdin);
  i = strtol (num,0,0L);
  for (n = 0; n < i; n ++)
    new Cintura (cons,"Cintura",Modello,strtol (Taglia,0,0L));
}

void Corriere::AddVestiario (char *capo)
{
char Modello [30];
char Taglia [10];
char Colore [20];
char num [10];
int i,n;
  printf ("Aggiungo %s\nModello :",capo);
  fgets (Modello,29,stdin);
  Modello [29] = 0;
  printf ("Taglia :");
  fgets (Taglia,9,stdin);
  printf ("Colore :");
  fgets (Colore,19,stdin);
  Colore [19] = 0;
  printf ("Quantita' :");
  fgets (num,9,stdin);
  i = strtol (num,0,0L);
  for (n = 0; n < i; n ++)
    new Vestiario (cons,capo,Modello,strtol (Taglia,0,0L),Colore);
}

/* Finalmente, completata la lista del corriere,
 * aggiunge i capi 'arrivati' a quelli presenti in magazzino
 */
void Corriere::Inserisci ()
{
  mag -> Add (cons);
}

/* Adesso ci sono tutte le 'action' delle varie voci del menu */

/* Menu' principale del corriere. */
void MenuCorriere::action (void *par)
{
Corriere c ((Magazzino *)par);
menu *mc = 0;
int i;

  /* Crea le voci del menu' */
  new MenuMaglione (mc,"Maglione");
  new MenuCamicia (mc,"Camicia");
  new MenuPantaloni (mc,"Pantaloni");
  new MenuCintura (mc,"Cintura");
  new MenuCravatta (mc,"Cravatta");
  new MenuInserisci (mc,"Carica in magazzino");

  /* Esegue il menu' finche' non viene scelto 'Carica in Magazzino' */
  do {
    i = mc->print (1);
    mc->doaction (i,&c);
  } while (i != 1);

  delete mc;	// Elimina il menu
}

/* Le seguenti 'action' non fanno altro che invocare i metodi del corriere */
void MenuMaglione::action (void *par)
{
  ((Corriere *)par) -> AddVestiario ("Maglione");
}

void MenuCamicia::action (void *par)
{
  ((Corriere *)par) -> AddVestiario ("Camicia");
}

void MenuPantaloni::action (void *par)
{
  ((Corriere *)par) -> AddVestiario ("Pantaloni");
}

void MenuCintura::action (void *par)
{
  ((Corriere *)par) -> AddCintura ();
}

void MenuCravatta::action (void *par)
{
  ((Corriere *)par) -> AddCravatta ();
}

void MenuInserisci::action (void *par)
{
  ((Corriere *)par) -> Inserisci ();
}