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

#include <stdio.h>     /* for printf */
#include <stdlib.h>    /* for exit */
#include "Explor.h"

extern char *optarg;
extern int   optind;
int getopt();

void generLangMainPage(char *lang)
{
  SxmlNode *streamNode;
  SxmlNode *listUpStreams;
  char *listUpStreamsStr;
  SxmlNode *listZooms;
  char *listZoomsStr;
  
  printf("<?dilib file=\"%s/Site/%s/index.html\" ?>\n", ExplorAreaDir, lang );
  ExplorHtmlPrefix();
  printf("<title>Area %s, Main Page</title>\n", ExplorAreaCode);
  printf(" <!-- generated by generLangMainPage (ExplorGenerSite.c)  -->\n");
  ExplorHtmlBeginBody();
  ExplorSidebar(NULL, NULL, 0, NULL);
  ExplorHeaderRoot(NULL);
  printf("<div class=\"main\">");
  ExplorHtmlPrintParam("Area/areaRootIntroduction");
  ExplorHtmlPrintParam3 ("Area","Main", "areaRootMainAccesses");

  if ((listUpStreamsStr=ExplorGetFromDict("Area/listUpStreams")))
    {
      SxmlNode *upNode;
      ExplorHtmlPrintParam3("Area", "mainPage", "titleListStreams");
      listUpStreams=SxmlFromString(listUpStreamsStr);
      SxmlReset(listUpStreams);
      printf("<ul>\n");
      while ((upNode=SxmlNextNode(listUpStreams)))
	{
	  char *streamCode;
	  char *streamName;
	  streamCode=SxmlGetAttribute(upNode,"code");
	  /* streamCode=SxmlLeafText(upNode); */
	  streamName=ExplorGetFromDictWithPrefix("Area/nameStream", streamCode); /* to be imporoved */
	  if (!streamName) streamName=streamCode;
	  printf ("<li><a href=\"%s/index.html\">%s</a></li>\n", streamCode, streamName); 
	}
      printf("</ul>\n");
    }

  if ((listZoomsStr=ExplorGetFromDict("Area/listZooms")))
    {
      SxmlNode *zoomNode;
      SxmlNode *zoomTreeNode;
      SxmlReset (ExplorAreaSiteLang);
      ExplorHtmlPrintParam3("Area", "mainPage", "titleListZooms");
      printf("<ul>\n");
      while ((zoomTreeNode=SxmlNextNode(ExplorAreaSiteLang)))
	{
	  char *streamCode;
	  char *streamName;
	  if (!(SxmlHasAttribute(zoomTreeNode,"group","zoom")))continue;
	  streamName=ExplorTreeNodeName(zoomTreeNode);
	  streamCode=SxmlGetAttribute(zoomTreeNode,"code");
	  printf ("<li><a href=\"%s/index.html\">%s</a></li>\n", streamCode, streamName); 
	}
      printf("</ul>\n");
     }

  ExplorHtmlPrintParam3("Area", "mainPage", "titleSeeAlso"); 
  printf("<ul>\n");
  printf ("<li><a href=\"Operations.html\">Opérations</a>\n");
  printf("</ul>\n");
  ExplorHtmlBottomDilib(0);
  printf("</div>");
  ExplorHtmlEndBody();
  return;
}

void generOperation(char *lang)
{
  printf("<?dilib file=\"%s/Site/%s/Operations.html\" ?>\n", ExplorAreaDir, lang );
  ExplorHtmlPrefix();
  printf("<title>Operating %s</title>\n", ExplorAreaCode);
  printf(" <!-- generated by generOperation (ExplorGenerSite.c)  -->\n");
  ExplorHtmlBeginBody();
  ExplorSidebar(NULL, NULL, 0, "Operations.html");
  ExplorHtmlHeader(NULL, NULL, NULL, NULL, NULL);
  printf("<div class=\"main\">");
  ExplorHtmlPrintParam("Area/areaOperationsIntroduction");
  printf("\n<hr/><h2>Paramètres</h2>");
  ExplorHtmlPrintParamFile();
  ExplorHtmlBottomDilib(0);
  printf("</div>");
  ExplorHtmlEndBody();
}

void generHtaccess(char *lang)
{
  SxmlNode *siteNode;
  SxmlNode *langNode;
  SxmlNode *streamNode;
  siteNode=SxmlGetFirstChildByTagName(ExplorAreaTree, "site");
  if (!siteNode)return;
  langNode=SxmlGetFirstChildTagAtt(siteNode, "lang", "code", lang);
  if (!langNode)return;
  SxmlReset(langNode);
  while((streamNode=SxmlNextNode(langNode)))
    {
      SxmlNode *stepNode;
      char *streamCode;
      int isHtaccessOpen;
      isHtaccessOpen=0;
      if (!(SxmlNodeHasName(streamNode,"stream")))continue;
      streamCode=SxmlGetAttribute(streamNode, "code");
      SxmlReset(streamNode);
      while((stepNode=SxmlNextNode(streamNode)))
	{
	  SxmlNode *indexNode;
	  char *stepCode;
	  stepCode=SxmlGetAttribute(stepNode, "code");
	  SxmlReset(stepNode);
	  while((indexNode=SxmlNextNode(stepNode)))
	    {
	      char *indexCode;
	      char *urlIndex;
	      if (!(SxmlNodeHasName(indexNode,"index")))continue;
	      indexCode=SxmlGetAttribute(indexNode, "code");
	      urlIndex=ExplorGetFromDictK5("Area", streamCode, stepCode, indexCode, "indexUrl");
	      if(!urlIndex) continue;
	      if (!(isHtaccessOpen))
		{
		  isHtaccessOpen=1;
		  printf("<?dilib file=\"%s/Site/%s/%s/.htaccess\" ?>\n", 
			 ExplorAreaDir, lang, streamCode );
		  printf("Options +FollowSymlinks\n");
		  printf("RewriteEngine on\n");
		}
	      printf("RewriteRule %s/Common/(.+) %s/Common/$1\n", urlIndex, stepCode);
	      printf("RewriteRule %s/(.+\\.php?.+) %s/$1\n", urlIndex, stepCode);
	      printf("RewriteRule %s/([^/?]+) %s/indexItem.php?index=%s&key=$1\n",  urlIndex, stepCode, indexCode);
	    }
	}
    }
}

int main (int argc, char **argv) {
   int cOption;
   char *tabList;
   char *pathParamFile;
   while((cOption=getopt(argc,argv,"t:"))!=EOF)
     {switch (cOption)
	 {
	 case 't':
	   pathParamFile=optarg;
	   break;
	 }
     }

   ExplorParamInit(pathParamFile);

   generOperation("fr");
   generLangMainPage("fr");
   generHtaccess("fr");
   exit(EXIT_SUCCESS);
}
