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

#include "SxmlNode.h"
#include "MediaWiki.h"
#include "StrDict.h"
#include "Explor.h"
#include <stdio.h>     /* for printf */
#include <stdlib.h>    /* for exit */
#include <getopt.h>
#include <time.h>

int ExplorGenerTemplateIsActive;
SxmlNode *listGener;
StrDict *ExplorGenerTemplatePrintDict=NULL;

int main(int argc, char **argv)
{
    /* 
         a : areaName
         d : area directory
         e : area env
         g : generates in template (parameter = name)
         G : only generate
         i : index
         l : list lenght
         p : pageMode
         s : step
         S : stream
         t : table
         w : wiki bi begin import
                  ei end import
                  bt begin template
                  et end template
                  s
    */
  int cOption;
  SxmlNode *itemGener;
  char *lenStr;
  int pageMode;

  ExplorGenerTemplateIsActive=0;
  ExplorTemplateCurrentStream="Main";
  ExplorTemplateCurrentStep="Exploration";
  ExplorTemplateCurrentIndex="AffOrg";
  ExplorGenerTemplatePrintDict=NULL;
  ExplorAreaWebSite=NULL;
  lenStr="10";
  listGener=NULL;
  pageMode=0;

  while((cOption=getopt(argc,argv,"c:i:g:G:l:pw:W:S:s:t:"))!=EOF)
    {
      {switch (cOption)
	 {
	 case 'c':
	   ExplorIncludeCategoryLang=optarg;
	   break;
	 case 'i':
	   ExplorTemplateCurrentIndex=optarg;
	   break;
	 case 'l':
	   lenStr=optarg;
	   break;
	 case 'g':
	   if (!ExplorGenerTemplateIsActive)
	     {
	       ExplorGenerTemplateIsActive=1;
	       listGener=SxmlElementCreate("list");
	     }
	   SxmlAppendChild(listGener, itemGener=SxmlElementCreate("gener"));
	   SxmlSetAttribute(itemGener, "name", optarg);
	   SxmlSetAttribute(itemGener, "stream", ExplorTemplateCurrentStream);
	   SxmlSetAttribute(itemGener, "step",   ExplorTemplateCurrentStep);
	   SxmlSetAttribute(itemGener, "index", ExplorTemplateCurrentIndex);
	   SxmlSetAttribute(itemGener, "length", lenStr);
	   break;
	 case 'G':
	   if (!ExplorGenerTemplateIsActive)
	     {
	       ExplorGenerTemplateIsActive=1;
	       ExplorGenerTemplateInitExplor();
	     }
	   printf ("\n  |%s =", optarg);
	   ExplorGenerTemplateGenerListSort
	    (
	     ExplorTemplateCurrentStream,
	     ExplorTemplateCurrentStep,
	     ExplorTemplateCurrentIndex,
	     NULL,
	     atoi(lenStr));
	   break;
	 case 'p':
	   pageMode=1;
	   break;
	 case 's':
	   ExplorTemplateCurrentStep=optarg;
	   break;
	 case 'S':
	   ExplorTemplateCurrentStream=optarg;
	   break;
	 case 't':
	   if (!ExplorGenerTemplatePrintDict)ExplorGenerTemplatePrintDict=StrDictFromFile(optarg);
	   else StrDictAddFromFile(ExplorGenerTemplatePrintDict, optarg);
	   break;
	 case 'W':
	   ExplorAreaWebSite=optarg;
	   break;
	 case 'w':
	   switch(*optarg)
	     {
	     case 'b':
	       if (optarg[1]=='i') MediaWikiExportFileBegin();
	       else
		 {
		   ExplorGenerTemplateInitExplor();
		   ExplorGenerTemplateBeginInclude(pageMode);
		 } 
	       break;
	     case 'e':
	       if (optarg[1]=='i')  MediaWikiExportFileEnd();
	       else
		 {
		   ExplorGenerTemplateEndInclude(pageMode);
		 }
	       break;
	     }
	 }
      }
    }
  if (!listGener)
    {
      exit(EXIT_SUCCESS);
    }
  else
    {
      ExplorGenerTemplateInitExplor();
      ExplorGenerTemplateBeginInclude(pageMode);
      SxmlReset(listGener);
      while ((itemGener=SxmlNextNode(listGener)))
	{
	  /*
	  SxmlNode *sortNode;
	  int len;
	  int i;
	  */
	  printf ("\n  |%s =", SxmlGetAttribute(itemGener, "name"));
	  ExplorGenerTemplateGenerListSort
	    (
	     SxmlGetAttribute(itemGener, "stream"), 
	     SxmlGetAttribute(itemGener, "step"), 
	     SxmlGetAttribute(itemGener, "index"),
	     ExplorGenerTemplatePrintDict,
	     atoi(SxmlGetAttribute(itemGener, "length")));

	  /*
	  ExplorGenerTemplateOpenReaderSort(SxmlGetAttribute(itemGener, "stream"), 
					    SxmlGetAttribute(itemGener, "step"), 
					    SxmlGetAttribute(itemGener, "index"));
	  len=atoi(SxmlGetAttribute(itemGener, "length"));
	  i=len;
	  while((i--)&& (sortNode=SxmlRecordReaderNextDocumentElement(ExplorSortReader)))
	    {
	      SxmlNode *keyNode;
	      SxmlNode *sizeNode;
	      keyNode=SxmlGetFirstChildByTagName(sortNode,"kw");
	      sizeNode=SxmlGetFirstChildByTagName(sortNode,"f");
	      printf ("\n# [[%s]] ({{Explor lien| ", SxmlLeafText(keyNode));
	      printf ("|wiki =%s ", ExplorWikiCode);
	      printf ("|area =%s ", ExplorAreaCode);
	      printf ("|flux =%s ", SxmlGetAttribute(itemGener, "stream"));
	      printf ("|étape =%s ", SxmlGetAttribute(itemGener, "step"));
	      printf ("|type = indexItem|index=%s.i ", SxmlGetAttribute(itemGener, "index"));
	      printf ("|clé =%s ",SxmlLeafText(keyNode));
	      printf ("|texte =%s" ,SxmlLeafText(sizeNode));
	      printf (")}}");
	    }
	  */
	}
      ExplorGenerTemplateEndInclude(pageMode);
    }
}
