/*   -*- coding: utf-8 -*-  */

/***********************************************************************
*
*        Module   : Explor
*        Fichier  : Explor.h
*        Auteur   : J. DUCLOY
*        Date     : octobre 2012
*
************************************************************************/
#ifndef _DILIB_EXPLOR_H
#define _DILIB_EXPLOR_H

#include "StrDict.h"
#include "SxmlNode.h"

#define EXPLOR_PHP_TYPE_BIBLIO                 1
#define EXPLOR_PHP_TYPE_INDEX                  2
#define EXPLOR_PHP_TYPE_INDEX_HEAD             3
#define EXPLOR_PHP_TYPE_INDEX_ITEM             4
#define EXPLOR_PHP_TYPE_ASSOC                  5
#define EXPLOR_PHP_TYPE_CLUSTER_HEAD           6
#define EXPLOR_PHP_TYPE_AND_NOT                7
#define EXPLOR_PHP_TYPE_CLUSTER_ITEM           8

/*      Variables coming from ExplorTools */

extern StrDict        *ExplorTableParam;
extern char * ExplorIncludeCategoryLang;

char           *ExplorAreaDir;
char           *ExplorAreaCode;
char           *ExplorWikiCode;
char           *ExplorAreaWebSite;

SxmlNode       *ExplorListStream;
SxmlNode       *ExplorListZoom;
SxmlNode       *ExplorListLang;
SxmlNode       *ExplorListSteps;
SxmlNode       *ExplorStreamTreeNode;

SxmlNode       *ExplorAreaTree;
SxmlNode       *ExplorAreaData;
SxmlNode       *ExplorAreaSite;
SxmlNode       *ExplorAreaSiteLang;

char           *ExplorSiteLang;

/*    Context variables */

char           *ExplorStreamCode;
extern int   ExplorAreaIsMulti;
extern char *ExplorTemplateCurrentStream;
extern char *ExplorTemplateCurrentStep;
extern char *ExplorTemplateCurrentIndex;

/* fonctions définies par ExplorTools.c */

extern SxmlDocumentReader *ExplorSortReader;

SxmlNode *ExplorSiteTreeNode(char *stream, char *step, char *indexAssoc);
SxmlNode *ExplorAreaTreeNode(char *stream, char *step, char *indexAssoc);
SxmlNode *ExplorSiteTreeNodeFromPath(char *path);
SxmlNode *ExplorGetStreamNodeFromTreeNode(SxmlNode *tn1);
char *ExplorTreeNodeShortName(SxmlNode *tn1);
char *ExplorTreeNodeName(SxmlNode *tn1);
char *ExplorTreeIndexMainPage(SxmlNode *indexNode);
char *ExplorTreeNodeLinkToCloserStep(SxmlNode *treeNode, char *targetStep, char *page); 
char *ExplorTreeNodeLinkToStep(SxmlNode *treeNode, char *targetStream, char *targetStep, char *page); 
char *ExplorTreeNodeLinkToStream(SxmlNode *treeNode, char *targetStream, char *page); 
SxmlNode *ExplorTreeInheritAttribute(SxmlNode *treeNode, char *name, char *code, char *att, char *val);

void ExplorHtmlDictInitStream(char * stream);
void ExplorHtmlDictInitStep(char * stream, char *step);

StrDict   *ExplorParamInit(char *pathParamFile);
StrDict   *ExplorInit(int mode, char *paramStr);

void   ExplorParamInitForStream(char *pathParamFile, char *stream);
void   ExplorSaveParamTable(char *base, char *suffix);

char *ExplorGetIndexSize (char *stream, char *step, char *indexCode);
char *ExplorGetBiblioSize (char *stream, char *step);
char *ExplorGetFromDict(char *k1);
char *ExplorGetFromDictK2(char *k1, char *k2 );
char *ExplorGetFromDictWithPrefix(char *prefix, char *code);

char *ExplorSetDict(char *k1, char *value);
char *ExplorSetDictK3(char *k1, char *k2, char *k3,  char *value);
char *ExplorSetDictK4(char *k1, char *k2, char *k3, char *k4, char *value);
char *ExplorSetDictK5(char *k1, char *k2, char *k3, char *k4, char *k5,  char *value);
void   ExplorGenerShellIndexPath(char *stream, char *step, char *index, char*path);
void  ExplorGenerShellIndexSxPath(char *stream, char *step, char *index, char*path);
void   ExplorGenerShellIndexShell(char *stream, char *step, char *index, SxmlNode *shell);
void   ExplorGenerShellIndexMake(char *stream, char *step, char *index, SxmlNode *shell);
char *ExplorSetDictK2(char *k1, char *k2, char *value);
char *ExplorGetFromDictK3(char *k1, char *k2, char *k3 );
char *ExplorGetFromDictK4(char *k1, char *k2, char *k3, char *k4 );
char *ExplorGetFromDictK5(char *k1, char *k2, char *k3, char *k4, char *k5 );

char *ExplorCascadeFromDictK3(char *k1, char *k2, char *key );
char *ExplorCascadeFromDictK4(char *k1, char *k2, char *k3, char *key );
char *ExplorCascadeFromDictK5(char *k1, char *k2, char *k3, char *k4, char *key );

void  ExplorGenerShellCreateData( char *streamCode, SxmlNode *streamListSteps);
void   ExplorGenerAllShellsIndex(char *streamCode);

char *ExplorGetNameStream(char *streamCode, char *stream, char *step);
char *ExplorGetShortNameStream(char *streamCode, char *stream, char *step);

/* fonctions définies par ExplorHtmlTools.c */
void ExplorHeaderRoot(char *page);
void ExplorSidebarIcons();
void ExplorHtmlPrefix();
void ExplorHtmlBeginBody();
void ExplorHtmlEndBody();
void ExplorHtmlIntroBiblio(char *stream, char *step);
void ExplorHtmlPrintParamFile();
void ExplorHeaderPhpBegin(SxmlNode * stepNode, char *page);
void ExplorHeaderPhpEnd(SxmlNode * stepNode, char *page);
void ExplorHeaderStream(SxmlNode * streamNode, char *page);
void ExplorHeaderStep(SxmlNode * stepNode, char *page);

char *ExplorHtmlPrintParam(char *key);
char *ExplorPrintHtmlWikiScript(SxmlNode *xmlParam);
char *ExplorHtmlFromWikiScript(SxmlNode *script);
void ExplorHtmlListOtherSteps(char * stream, char *step);

void ExplorSidebarTop(int level);
void ExplorSidebarBottom();
void ExplorHtmlHeader(char *stream, char *step, char *page, char *endLine1, char *line2);

char *ExplorHtmlPrintParam3(char *k1, char *k2, char *key);
char *ExplorHtmlPrintParam4(char *k1, char *k2, char *k3, char *key);
char *ExplorHtmlPrintParam5(char *k1, char *k2, char *k3, char *k4, char *key);

char *ExplorPhpPrintParam3(char *k1, char *k2, char *key);
char *ExplorPhpPrintParam4(char *k1, char *k2, char *k3, char *key);
char *ExplorPhpPrintParam5(char *k1, char *k2, char *k3, char *k4, char *key);

void ExplorSiteGenerBibRecord (char *lang, char *stream, char *step, int treeCode);

void ExplorHtmlListIndexes(char * stream, char *step, int format);
void ExplorHtmlBottomDilib(int level);
int ExplorGenerStepMainPage(char * stream, char *step);

char *ExplorBufferCatInclude(Buffer *bScript, SxmlNode *incNode);
char *ExplorBufferCatWikiTextWithInclude(Buffer *bufLink, SxmlNode *wikiTextNode);

/* fonctions définies par ExplorDataShellTools.c */

void ExplorGenerShellCreateStep(char*stream, char *step);
int ExplorCurationRecordOperations(char *stream, char *step);
int ExplorGenerDeleteHfd(char *stream, char *step, char *root);
int ExplorGenerBiblioFilter(char *stream, char *step);
void ExplorExplorationCommonOperations(char *stream, char *step, int curationPers);
void ExplorGenerBuildBiblio(char *stream, char *step, char *corpus);
void ExplorGenerShellIndexMakeRules(char *stream, char *step, char *index, char *indexRule);
void ExplorGenerShellIndexHidSort(char*stream, char *step, char *index, int type);
void ExplorGenerShellIndexEnd(char *stream, char *step, char *index, char *path, char *indexRule);
void ExplorGenerMakeStep(char*stream, char *step);

/* fonctions définies par ExplorGenerPhpProc.c */

int ExplorSiteGenerIndexHead (char *lang, char *stream, char *step, int treeCode);
int ExplorSiteGenerIndexItem (char *lang, char *stream, char *step, int treeCode);
int ExplorSiteGenerIndexFacet (char *lang, char *stream, char *step, int treeCode);
void ExplorSiteGenerIndexAutAff(char *lang, char *stream, char *step, int treeCode);
int ExplorSiteGenerClusterHead (char *lang, char *stream, char *step, int treeCode);
int ExplorSiteGenerCluster (char *lang, char *stream, char *step, int treeCode);
int ExplorSiteGenerAndNot (char *lang, char *stream, char *step, int treeCode);
int ExplorSiteGenerAssocHead (char *lang, char *stream, char *step, int treeCode);
int ExplorSiteGenerAssoc (char *lang, char *stream, char *step, int treeCode);
void ExplorSiteGenerBibRecordById (char *lang, char *stream, char *step, int treeCode);
void ExplorSiteGenerUnitIndex (char *lang, char *stream, char *step, int treeCode);
void ExplorSiteGenerBibRecordBegin (char *lang, char *stream, char *step, int treeCode);
void ExplorSiteGenerBibRecordEnd (char *lang, char *stream, char *step, int treeCode);
void ExplorSiteGenerBibRecordByIdBegin (char *lang, char *stream, char *step, int treeCode);

void ExplorSiteGenerBibRecordAffiliationSection (char *lang, char *stream, char *step);
void ExplorSiteGenerBibRecordLinkSection (char *lang, char *stream, char *step);
void ExplorSiteGenerBibRecordXmlSection (char *lang, char *stream, char *step);
void ExplorSiteGenerBibRecordShellSection (char *lang, char *stream, char *step);

/* fonctions définies par ExplorPhpTools.c */
void ExplorGenPhpHeadPage (char *lang, char *stream, char *step);
int  ExplorSiteGenerImplicitPhp (char *lang, char *stream, char *step, int level);
void ExplorSitePhpIntro();
void ExplorSitePhpEnd();
void  ExplorSitePhpProcEnd();

/* fonctions définies par ExplorSidebar.c */

void ExplorSidebar(char *stream, char *step, int typePhp, char *page);

/* fonctions définies par ExplorGenerTemplateTools.c */

extern char *ExplorTemplateName;
extern SxmlNode *ExplorTemplateDataTree;

void ExplorGenerTemplateInitExplor();
void ExplorGenerTemplateBeginInclude();
void ExplorGenerTemplateEndInclude();
void ExplorGenerTemplateInit(char *endName);
SxmlDocumentReader *ExplorGenerTemplateOpenReaderSort(char *stream, char *step, char *index);
void ExplorGenerTemplateGenerListSort(char *stream, char *step, char *index, StrDict *table, int length);

#endif /* _DILIB_EXPLOR_H */
