#include "fileutil.h"
#include "nullproto.h"
#include "collectset.h"

#import <Foundation/NSArray.h>
#import <UIKit/UIApplication.h>

class GreenstoneAPI
{
 public:
  GreenstoneAPI(UIApplication* toplevelApp);
  virtual ~GreenstoneAPI();

  bool sanityCheck();
  NSMutableArray* collectionList();
  ColInfoResponse_t& collectInfo (const text_t& collection);
  ColInfoResponse_t& collectInfo (NSString* nscollection);

  void setLanguage(const text_t& lang) { _lang = lang; }

  NSString* collectionmetaValue(ColInfoResponse_t& colinfo, text_t key);
  NSString* collectionName(ColInfoResponse_t& colinfo);

  NSString* getDocument(NSString* nscollection, NSString* nsgid); // ******
  NSString* getResolvedDocument(NSString* nscollection, NSString* nsgid);

  NSMutableArray* getMetadata(NSString* nscollection, NSString* nsgid, NSString* nsmetaname);
  NSString* getMetadataFirst(NSString* nscollection, NSString* nsgid, NSString* nsmetaname);
  NSString* getMetadataFirst(const text_t& collection, text_t& gid, text_t& metaname);

  NSString* getSrcUrlMetadata(NSString* nscollection, NSString* nsgid);

  NSMutableArray* browseClassifierList(NSString* nscollection, NSString* nsgid);
  NSMutableArray* browseToplevelList(NSString* nscollection);

  NSMutableArray* query(NSString* nscollection, NSString* nsquery);


  
  void alert(NSString* nslevel, NSString* nsmessage);
  void alert(char* level, char* message);
  void alert(text_t level, text_t message);

 protected:
  text_t resolveUrls(const text_t& unresolved, const text_t& collection, const text_t& archivedir);
  text_t srclinkToUrl(const text_t& srclink, const text_t& collection, const text_t& archivedir);

  bool recurse_contents(const text_t& collection, ResultDocInfo_t& section,
			text_tset& metadata, text_t& output_text);


  void set_queryfilter_options (const text_t& collection, FilterRequest_t &request, const text_t &querystring);
  NSMutableArray* filterResponseToTitlesList(const text_t& collection, FilterResponse_t &sections);
  NSMutableArray* search_single_collection (const text_t& collection, const text_t& query);

 protected:
  UIApplication* _toplevelApp;
  text_t _lang;

  collectset*   _cservers;
  nullproto*    _nproto;
  text_t        _gsdlhome;
};

