//Commesso: Commesso.h
#ifndef CAPO_H
#include "capo.h"
#endif
#ifndef MAGAZ_H
#include "magaz.h"
#endif
#ifndef MENU_H
#include "menu.h"
#endif
#ifndef COMMESSO_H
#define COMMESSO_H

class Commesso {
  Capo *scelti;      // Lista dei capi scelti (dal magazzino)
  Capo *comprati;    // Lista dei capi comprati (scelti dall'utente)
  AttrList *criteri; // Lista dei criteri imposti dal cliente
  Magazzino *mag;    // Magazzino nel quale trovari i capi
public:
  enum CapoScelto { Maglione, Camicia, Pantaloni, Cintura, Cravatta };
  Commesso (Magazzino *m) { mag = m; scelti = 0; comprati = 0;
    criteri = 0; };
  // Azioni del commesso
  void Scegli (CapoScelto scelto);
  void Cerca ();
  void Compra ();
  void ListaScelti ();
  void ListaDisponibili ();
  void ToScelti ();
  void ToDisponibili ();
  void AddCriterio (AttrList::modo m, AttrList::tipo_t t);
};

/* Tutti i 'Menu...' sono uguali.
 * Contebgono un costruttore con parametri che inizializza la superclasse 'menu'
 * e la definizione della funzione virtuale pura di 'menu' 'action'
 */
class MenuCommesso : public menu {
protected:
  virtual void action (void *par);
public:
  MenuCommesso (TPtr &base,char *n) : menu (base,n) {};
};

class MenuACamicia : public menu {
protected:
  virtual void action (void *par);
public:
  MenuACamicia (TPtr &base,char *n) : menu (base,n) {};
};

class MenuAMaglione : public menu {
protected:
  virtual void action (void *par);
public:
  MenuAMaglione (TPtr &base,char *n) : menu (base,n) {};
};

class MenuAPantaloni : public menu {
protected:
  virtual void action (void *par);
public:
  MenuAPantaloni (TPtr &base,char *n) : menu (base,n) {};
};

class MenuACintura : public menu {
protected:
  virtual void action (void *par);
public:
  MenuACintura (TPtr &base,char *n) : menu (base,n) {};
};

class MenuACravatta : public menu {
protected:
  virtual void action (void *par);
public:
  MenuACravatta (TPtr &base,char *n) : menu (base,n) {};
};

class MenuScegli : public menu {
protected:
  virtual void action (void *par);
public:
  MenuScegli (TPtr &base,char *n) : menu (base,n) {};
};

class MenuScarta : public menu {
protected:
  virtual void action (void *par);
public:
  MenuScarta (TPtr &base,char *n) : menu (base,n) {};
};

class MenuCompra : public menu {
protected:
  virtual void action (void *par);
public:
  MenuCompra (TPtr &base,char *n) : menu (base,n) {};
};

class MenuCerca : public menu {
protected:
  virtual void action (void *par);
public:
  MenuCerca (TPtr &base,char *n) : menu (base,n) {};
};

class MenuModello : public menu {
protected:
  virtual void action (void *par);
public:
  MenuModello (TPtr &base,char *n) : menu (base,n) {};
};

class MenuTagliaPiu : public menu {
protected:
  virtual void action (void *par);
public:
  MenuTagliaPiu (TPtr &base,char *n) : menu (base,n) {};
};

class MenuTagliaMeno : public menu {
protected:
  virtual void action (void *par);
public:
  MenuTagliaMeno (TPtr &base,char *n) : menu (base,n) {};
};

class MenuTaglia : public menu {
protected:
  virtual void action (void *par);
public:
  MenuTaglia (TPtr &base,char *n) : menu (base,n) {};
};

class MenuColore : public menu {
protected:
  virtual void action (void *par);
public:
  MenuColore (TPtr &base,char *n) : menu (base,n) {};
};

class MenuVediScelti : public menu {
protected:
  virtual void action (void *par);
public:
  MenuVediScelti (TPtr &base,char *n) : menu (base,n) {};
};

class MenuVediDisponibili : public menu {
protected:
  virtual void action (void *par);
public:
  MenuVediDisponibili (TPtr &base,char *n) : menu (base,n) {};
};

#endif