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

/*
    First step of genating area
 */

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


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

generShellAreaAllParam()
{
  SxmlNode *item;
  printf("<?dilib file=\"%s/bin/AreaAllParam.sh\" ?>\n", ExplorAreaDir );
  printf ("#!/bin/sh\n\n");
  SxmlReset (ExplorListStream);
  while (item=SxmlNextNode(ExplorListStream)) 
    {
      printf("sh $DILIB/bin/%sExplorParam -d %s -s %s -l fr\n ", ExplorGetFromDictK3 ("Area", SxmlLeafText(item), "dilibPrefix"), ExplorAreaDir, SxmlLeafText(item));
    }
  SxmlReset (ExplorListStream);
  printf("(\n");
  SxmlReset (ExplorListStream);
  while (item=SxmlNextNode(ExplorListStream)) 
    {
      printf("  cat %s/Input/%sParam.tab \n", ExplorAreaDir,   SxmlLeafText(item));
    }
  printf("  cat %s/Input/AreaWicriParam.tab\n", ExplorAreaDir);
  printf(") | StrDictMerge > %s/Input/AreaParam.tab\n", ExplorAreaDir);

  /* To be improved for multilinguality */
  printf("(\n");
  printf(" cat %s/Input/AreaParam.tab\n", ExplorAreaDir);
  printf(" cat $DILIB/data/Explor/param.fr.tab\n");
  printf("  cat %s/Input/AreaWicriParam.tab\n", ExplorAreaDir);
  printf(") | StrDictMerge > %s/Input/AreaParam.fr.tab\n", ExplorAreaDir);
}

generInitParamTab()
{
  char *k;
  char *v;
  printf("<?dilib file=\"%s/Input/AreaParamInitV1.tab\" ?>\n", ExplorAreaDir );
  StrSearchIteratorReset(ExplorTableParam);
  while(k=StrSearchNext(ExplorTableParam))
    {
      printf("%s\t%s\n",k, StrSearchValue(ExplorTableParam));
    }
}

main (int argc, char **argv) {
   int cOption;
   char *tabList;
   SxmlNode *streamNode;

   while((cOption=getopt(argc,argv,"d:p:t:"))!=EOF)
     {switch (cOption)
	 {
	 case 't':
	   ExplorTableParam=StrSearchGetTable(optarg,100);
	   break;
	 case 'd':
	   ExplorAreaDir=optarg;
	   break;
	 }
     }
   StrSearchPut(ExplorTableParam,"Area/dirPath", ExplorAreaDir);
   tabList=StrSearch(ExplorTableParam,"Area/streams");
   ExplorListStream=SxmlFromString(tabList);
   SxmlReset (ExplorListStream);
   while (streamNode=SxmlNextNode(ExplorListStream)) 
     {
       char *stream;
       char *typeStream;
       Buffer *bStream;
       char *pos2;
       stream=SxmlLeafText(streamNode);
       typeStream=ExplorGetFromDictK3 ("Area", stream, "typeStream");
       bStream=BufferCreate(10,10);
       pos2=strchr(typeStream,':');
       if (pos2)
	 {
	   char *dilibPrefix;
	   char *nameSpace;
	   nameSpace=BufferString(bStream);
	   dilibPrefix=ExplorGetFromDictK2(typeStream, "dilibPrefix");
	   BufferStrncpy(bStream, typeStream, pos2-typeStream);
	   ExplorSetDictK3("Area", stream, "dilibPrefix" , BufferString(bStream));
	 }
     }
   generInitParamTab();
   generShellAreaAllParam();
}
