/*   -*- coding: utf-8 -*-  */
/***********************************************************************
 
   Module   : Inist
   Commande : InistBhaExplorDataShell
   Fichier  : InistBhaExplorDataShell.c
   Auteur   : DUCLOY
   Date     : 2013
 
************************************************************************/

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

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

SxmlNode *ExplorStepNode;
SxmlNode *streamListSteps;

void generBhaShellCorpusBiblio()
{
  char *bhaExodicImportFile;
  SxmlNode *nodeInput;
  char *strInputExodic;
  SxmlNode *listInputExodic;
  printf("<?dilib file=\"%s/bin/%sCorpusBiblio.sh\" ?>\n", ExplorAreaDir, ExplorStreamCode );
  printf ("#!/bin/sh\n");
  printf ("# This file is generated by Dilib / Inist / InistBhaExplorDataShells \n");
  strInputExodic=ExplorGetFromDictK3("Area", ExplorStreamCode, "Corpus/Inist:exodicImportFile");  
  printf ("#   Parameter strInputExodic : %s \n", strInputExodic);
  listInputExodic=SxmlFromString(strInputExodic);
  printf ("(  \n");
  while ((nodeInput=SxmlNextNode(listInputExodic)))
    {
      bhaExodicImportFile =SxmlLeafText(nodeInput);
      printf ("     cat %s/Import/%s   \n", ExplorAreaDir, bhaExodicImportFile);      
    }
  printf (" )  | sort -u                 \\\n");
  printf ("   | Utf8FromDecimalEntity   \\\n");
  printf ("   | InistBhaCurPar     \\\n");
  printf ("   | InistExodic2Tei  -t %s/Input/AreaParam.data.tab -s %s   \\\n", ExplorAreaDir, ExplorStreamCode);
  printf ("   | TeiPutRefToIdno -t wicri:Area/%s/Corpus  \\\n", ExplorStreamCode );
  printf ("   | HfdBuild -h %s/Data/%s/Corpus/biblio\n\n",ExplorAreaDir, ExplorStreamCode);

  printf (" echo \"==== \" %s, step Corpus, biblio done\n", ExplorStreamCode);
  printf (" HfdCat %s/Data/%s/Corpus/biblio.hfd | wc \n", ExplorAreaDir, ExplorStreamCode);

  printf("<?dilib appendFile=\"%s/bin/area.mk\" ?>\n", ExplorAreaDir );
  printf("# This part is generated by InistBhaExplorDataShells / generInistShellCorpusBiblio()  \n");
  printf("%s/Make/%s/Corpus/biblio:  ", ExplorAreaDir, ExplorStreamCode);
  while ((nodeInput=SxmlNextNode(listInputExodic)))
    {
      printf (" \\\n");
      bhaExodicImportFile =SxmlLeafText(nodeInput);
      printf ("     %s/Import/%s   \n", ExplorAreaDir, bhaExodicImportFile);      
    }
  printf("\n\tsh %s/bin/%sCorpusBiblio.sh \n", ExplorAreaDir, ExplorStreamCode );
  printf("\ttouch %s/Make/%s/Corpus/biblio\n\n", ExplorAreaDir, ExplorStreamCode);
}

void generBhaShellCurationBiblio()
{
  SxmlNode *previousStep;
  char *codePrevious;

  printf("<?dilib file=\"%s/bin/%sCurationBiblio.sh\" ?>\n", ExplorAreaDir, ExplorStreamCode );
  printf ("#!/bin/sh\n");
  previousStep=SxmlPreviousSibling(ExplorStepNode);
  codePrevious=SxmlLeafText(previousStep);
  printf (" HfdCat %s/Data/%s/%s/biblio.hfd \\\n", ExplorAreaDir, ExplorStreamCode, codePrevious);
  printf ("   | SgmlFast -c 1  \\\n");
  ExplorCurationRecordOperations(ExplorStreamCode, "Curation");
  printf ("   | TeiPutRefToIdno -t wicri:Area/%s/%s  \\\n", ExplorStreamCode, "Curation" );
  printf ("   | InistBhaKwd2Wicri   \\\n");
  printf ("   | HfdBuild -h %s/Data/%s/Curation/biblio\n\n",ExplorAreaDir, ExplorStreamCode);

  printf (" echo \"==== \" %s, step Curation, biblio done\n", ExplorStreamCode);
  printf (" HfdCat %s/Data/%s/Curation/biblio.hfd | wc \n", ExplorAreaDir, ExplorStreamCode);

  printf("<?dilib appendFile=\"%s/bin/area.mk\" ?>\n", ExplorAreaDir );
  printf("# This part is generated by InistBhaExplorDataShells /  generBhaShellCurationBiblio() \n");
  printf("%s/Make/%s/Curation/biblio: \\\n", ExplorAreaDir, ExplorStreamCode);
  printf("                $(DILIB)/data/Wicri/Metadata/BigUnivToPays.tab \\\n");
  printf("                %s/Make/%s/%s.step \n", ExplorAreaDir, ExplorStreamCode, codePrevious);
  printf("\tsh %s/bin/%sCurationBiblio.sh \n", ExplorAreaDir, ExplorStreamCode );
  printf("\ttouch %s/Make/%s/Curation/biblio\n\n", ExplorAreaDir, ExplorStreamCode);
}

void generBhaShellExplorationBiblio()
{
  SxmlNode *previousStep;
  char *codePrevious;

  printf("<?dilib file=\"%s/bin/%sExplorationBiblio.sh\" ?>\n", ExplorAreaDir, ExplorStreamCode );
  printf ("#!/bin/sh\n");
  previousStep=SxmlPreviousSibling(ExplorStepNode);
  codePrevious=SxmlLeafText(previousStep);
  printf (" HfdCat %s/Data/%s/%s/biblio.hfd \\\n", ExplorAreaDir, ExplorStreamCode, codePrevious);
  printf ("   | SgmlFast -c 1  \\\n");
  ExplorCurationRecordOperations(ExplorStreamCode, "Exploration");
  printf ("   | SxmlSelect -g record/TEI/teiHeader/fileDesc/publicationStmt/date/1 -p @g1 -p @1 \\\n");
  printf ("   | sort -rn \\\n");
  printf ("   | SgmlFast -c 1  \\\n");
  printf ("   | TeiPutRefToIdno -t wicri:Area/%s/%s  \\\n", ExplorStreamCode, "Exploration" );

  printf ("   | HfdBuild -h %s/Data/%s/Exploration/biblio\n\n",ExplorAreaDir, ExplorStreamCode);

  printf (" echo \"==== \" %s, step Exploration, biblio done\n", ExplorStreamCode);
  printf (" HfdCat %s/Data/%s/Exploration/biblio.hfd | wc \n", ExplorAreaDir, ExplorStreamCode);

  printf("<?dilib appendFile=\"%s/bin/area.mk\" ?>\n", ExplorAreaDir );
  printf("# This part is generated by InistBhaExplorDataShells / generBhaShellExplorationBiblio()  \n");
  printf("%s/Make/%s/Exploration/biblio: \\\n", ExplorAreaDir, ExplorStreamCode);
  printf("                %s/Make/%s/%s.step \n", ExplorAreaDir, ExplorStreamCode, "Curation");
  printf("\tsh %s/bin/%sExplorationBiblio.sh \n", ExplorAreaDir, ExplorStreamCode );
  printf("\ttouch %s/Make/%s/Exploration/biblio\n\n", ExplorAreaDir, ExplorStreamCode);
}

void generBhaShellCheckpointBiblio()
{
  SxmlNode *previousStep;
  char *codePrevious;
  char *step;

  step= "Checkpoint";
  printf("<?dilib file=\"%s/bin/%sCheckpointBiblio.sh\" ?>\n", ExplorAreaDir, ExplorStreamCode );
  printf ("#!/bin/sh\n");
  previousStep=SxmlPreviousSibling(ExplorStepNode);
  codePrevious=SxmlLeafText(previousStep);
  printf (" HfdCat %s/Data/%s/%s/biblio.hfd \\\n", ExplorAreaDir, ExplorStreamCode, codePrevious);
  printf ("   | SgmlFast -c 1  \\\n");
  ExplorCurationRecordOperations(ExplorStreamCode, "Checkpoint");
  printf ("   | TeiPutRefToIdno -t wicri:Area/%s/%s  \\\n", ExplorStreamCode, "Checkpoint" );
  printf ("   | TeiPutRefToIdno -t wicri:Area/%s/Checkpoint  \\\n", ExplorStreamCode );
  printf ("   | HfdBuild -h %s/Data/%s/Checkpoint/biblio\n\n",ExplorAreaDir, ExplorStreamCode);

  printf (" echo \"==== \" %s, step Checkpoint, biblio done\n", ExplorStreamCode);
  printf (" HfdCat %s/Data/%s/Checkpoint/biblio.hfd | wc \n", ExplorAreaDir, ExplorStreamCode);

  printf("<?dilib appendFile=\"%s/bin/area.mk\" ?>\n", ExplorAreaDir );
  printf("# This part is generated by InistBhaExplorDataShells /  generIstexShellCheckExplBiblio  \n");
  printf("%s/Make/%s/%s/biblio: \\\n ", ExplorAreaDir, ExplorStreamCode, step);
  printf("                %s/Make/%s/Curation.step \n", ExplorAreaDir, ExplorStreamCode);
  printf("\tsh %s/bin/%s%sBiblio.sh\n", ExplorAreaDir, ExplorStreamCode, step );
  printf("\ttouch %s/Make/%s/%s/biblio\n\n", ExplorAreaDir, ExplorStreamCode, step);
}

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

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

   ExplorParamInit(pathParamFile);
   streamListSteps=SxmlFromString(ExplorGetFromDictK3("Area", ExplorStreamCode, "listSteps"));
   ExplorGenerShellCreateData( ExplorStreamCode, streamListSteps);
   SxmlReset(streamListSteps);
   while ((ExplorStepNode=SxmlNextNode(streamListSteps)))
    {
      char *stepCode;
      stepCode=SxmlLeafText(ExplorStepNode);
      if(strcmp(stepCode, "Corpus")==0)
	{
	  ExplorGenerShellCreateStep(ExplorStreamCode , stepCode);
	  generBhaShellCorpusBiblio();
	  continue;
	}
      if(strcmp(stepCode, "Curation")==0)
	{
	  ExplorGenerShellCreateStep(ExplorStreamCode , stepCode);
	  generBhaShellCurationBiblio();
	  continue;
	}
      if(strcmp(stepCode, "Exploration")==0)
	{
	  ExplorGenerShellCreateStep(ExplorStreamCode , stepCode);
	  generBhaShellExplorationBiblio();
	  continue;
	}
      if(strcmp(stepCode, "Checkpoint")==0)
	{
	  ExplorGenerShellCreateStep(ExplorStreamCode , stepCode);
	  generBhaShellCheckpointBiblio();
	  continue;
	}
    }
   ExplorGenerAllShellsIndex(ExplorStreamCode);
   exit(EXIT_SUCCESS);
}

