#include "Syslog.h"
#include "ItemList.h"

ItemList::ItemList( const char *newID )
{
     _identifier = NULL;
     setIdentifier( newID );
}

ItemList::~ItemList()
{
     if( _identifier != NULL )
	  delete _identifier;
}


char *ItemList::setIdentifier( const char *newID ) 
{
     if( _identifier != NULL )
	  delete _identifier;
     _identifier = strdup( newID );

     return _identifier;
}

Boolean ItemList::isIdentifier( const char *checkMe )
{
     if( _identifier != NULL )
     {
	  if( !strcmp( _identifier, checkMe ) )
	       return True;
     }

     return False;
}

short ItemList::count()
{
     return _itemList.size();
}

Item *ItemList::findItem( short findMe )
{
     Item *current;

     if( (findMe >= 0) &&
	 (findMe <  _itemList.size() ) ) {
	  _itemList.get( findMe, (Item * *)&current);
	  return current;
     }
     return NULL;
}

Item *ItemList::findItem( const char *findMe )
{
     Boolean debug = False;
     Item *current;

     for( int i = 0; i < _itemList.size(); i++ ) {
	  _itemList.get(i,(Item * *)&current);

	  if( !stricmp( findMe, current->name() ) ) 
	  {
	       dprintf("ItemList::findItemIndex -- Found item #%d %s = %s",
		       i, findMe, current->name() );
	       return current;
	  }

     }

     dprintf("ItemList:findItemIndex -- Failed to find item %s",
	     findMe );

     return NULL;
}

short ItemList::findItemIndex( const char *findMe )
{
          Boolean debug = False;
     Item *current;

     for( int i = 0; i < _itemList.size(); i++ ) {
	  _itemList.get(i,(Item * *)&current);

	  if( !stricmp( findMe, current->name() ) ) 
	  {
	       dprintf("ItemList::findItemIndex -- Found item #%d %s = %s",
		       i, findMe, current->name() );
	       return i;
	  }

     }

     dprintf("ItemList:findItemIndex -- Failed to find item %s",
	     findMe );

     return -1;
}

int ItemList::verify()
{
     Boolean debug = False;
     Item *current;

     int bad = 0;

     dprintf("ItemList::verify -- Verifying all items of type %s are complete",
	     _identifier );

     for( int i = 0; i < _itemList.size(); i++ ) {
	  _itemList.get(i,(Item * *)&current);

	  dprintf("ItemList::verify -- Checking %s %s", 
		  _identifier, current->name() );

	  if( current->verify() )
	       bad++;

     }

     dprintf("ItemList::verify -- %d items of type %s did not verify",
	     bad, _identifier );

     return -bad;

}
