#ifndef CATALOG_CLASS_
#define CATALOG_CLASS_
class Catalog: public Database
	{
	public:
		//Constructor/Destructor
		Catalog();
		~Catalog();
		//Member Data
		enum ITEM_TYPES {BOOK, NEWSPAPER,PERIODICAL, ITEM_TYPE_SIZE};
		static const Text itemTypeNames[ITEM_TYPE_SIZE];
		//Member functions
		static void printStats() ;
		static const char * getItemName(Identity::Id id);
	 	static Database::LibList getItemList(list <Identity::Id>idList);
		static void setStatusOnShelf(Identity::Id id);
		static void displayCatalog(Database::LibList itemList);
		static void catalogSort(UI::Command type);

		static void catalogInit();
		static void bookInit();
		static void periodicalInit(); 
		static void newspaperInit(); 

		static void bookSort(UI::Command type);
		static void periodicalSort(UI::Command type);
		static void newspaperSort(UI::Command type);
	 	static Library_Item *getLibraryItem(Identity::Id id);
		static ITEM_TYPES getItemType(Identity::Id id);
	private:
		//Member data
		BorrowDB *borrowDB;
		LostDB   *lostDB;
		static const Text CLASS_NAME ;

		static Database::LibList itemList;

		static BookMap bookMap;
		static NewspaperMap newspaperMap;
		static PeriodicalMap periodicalMap;

		//Member functions
		static void getBookStats(int frequency[Library_Item::STATUS_SIZE]);
		static void getPeriodicalStats(int frequency[Library_Item::STATUS_SIZE]);
		static void getNewspaperStats(int frequency[Library_Item::STATUS_SIZE]);


		static void loadItemList();
		static void loadBookList(bool clear);
		static void loadNewspaperList(bool clear);
		static void loadPeriodicalList(bool clear);

		void processLostStatus();
		static void setStatus(Identity::Id id, Library_Item::Status);
		void processCheckedOutStatus();

	 	static Library_Item *getItem(Identity::Id id);

		static void displayBooks(Database::LibList bookList);
		static void displayPeriodicals(Database::LibList periodicalList);
		static void displayNewspapers(Database::LibList newspaperList);

		UI::Command bookMenu();
		UI::Command periodicalMenu();
		UI::Command newspaperMenu();

		void loadBooks();
	 	void loadNewspapers();
	 	void loadPeriodicals();

		void deleteCatalog();
		void deleteBooks();
		void deleteNewspapers();
		void deletePeriodicals();
		static void displayStat(Text statusName, 
  										int frequency[ITEM_TYPE_SIZE][Library_Item::STATUS_SIZE], 
            						int status);

		static Book *getBook(Identity::Id id);
		static Newspaper *getNewspaper(Identity::Id id);
		static Periodical *getPeriodical(Identity::Id id);
     	};
#endif
