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

/*************************************************
*
*        Module   : Inra
*        Commande : InraHalAffiliationSetCountry
*        Fichier  : InraHalAffiliationSetCountry.c
*
******************************/

#include <stdio.h>     /* for printf */
#include <stdlib.h>    /* for exit */
#include <getopt.h>
#include "SxPath.h"
#include "Buffer.h"
#include "WicriPaysFromEn.h"

extern char *optarg;
extern int   optind;

int getopt();

SxPathResult *teiPathAffiliation;

SxmlNode * affiliation;

/* StrSearchTable *tablePays; */
SxmlNode *docInput;

SxmlNode *listAffiliations;



void proceedAffiliation()
{
  SxmlNode *inraCountry;
  SxmlNode *inraAff;
  char     *pays;
  char     *typeAff;
  inraAff=SxmlGetFirstChildByTagName(affiliation,"inra:affiliation");
  if (!inraAff)return;
  typeAff=SxmlGetAttribute(inraAff, "type");
  inraCountry=NULL;
  if (strcmp(typeAff, "INRA")==0)
    {
      SxmlNode *unit;
      unit=SxmlGetFirstChildByTagName(inraAff,"unit");
      if (unit)
	{
	  inraCountry=SxmlGetFirstChildByTagName(unit,"country");
	}
    }
  else
    {
      inraCountry=SxmlGetFirstChildByTagName(inraAff,"country");
    }
  if (inraCountry)
   {
     char *codeC3;
     codeC3=SxmlLeafText(inraCountry);

     if ((pays=WicriPaysFromIsoC3(codeC3)))
       {
	 SxmlAppendChild(affiliation,SxmlLeafCreate("country", pays));
	 SxmlSetAttribute(affiliation, "wicri:level","1");
       }
     else if ((pays=WicriPaysFromOldIsoC3(codeC3)))
       {
	 SxmlNode *countryNode;
	 SxmlAppendChild(affiliation,countryNode=SxmlLeafCreate("country", pays));
	 SxmlSetAttribute(countryNode, "wicri:auto", codeC3);  
	 SxmlSetAttribute(affiliation, "wicri:level","1");
       }
     else  SxmlAppendChild(affiliation,SxmlLeafCreate("wicri:noCountry", codeC3));
   }
}

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

 teiPathAffiliation=SxPathSetCompile("TEI/teiHeader/fileDesc/sourceDesc/biblStruct/analytic/author/affiliation");

 while ((docInput=SxmlInputNextDocumentElement()))
   {      
     if ((SxmlNodeHasName(docInput,"record")))
       {
	 SxmlNode *inraPart;
	 inraPart=SxmlGetFirstChildByTagName(docInput,"INRA");
	 SxmlFree(inraPart);
	 if ((listAffiliations=SxPathSetResultListCreate(teiPathAffiliation, docInput)))
	   {
	     while((affiliation=SxmlNodeListNextNode(listAffiliations)))
	       {
		 proceedAffiliation();
	       }
	   }
       }
     SxmlPrint (SxmlInputRecord);
   }
  exit(EXIT_SUCCESS);
}
