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

/***********************************************************************
*
*        Module   : Wicri
*        Fichier  : WicriBresilTools.c
*        Auteur   : J. DUCLOY
*        Date     : mars 2015
*
************************************************************************/

#include <stdlib.h> 
#include <string.h>
#include <ctype.h>
#include "Buffer.h"
#include "RegExp.h"
#include "StrDict.h"
#include "WicriBresil.h"

StrDict *WicriBresilCode2StateNameFr=NULL;
StrDict *WicriBresilStr2StateNameFr=NULL;
static Buffer *bufName=NULL;

char *WicriBresilGetStateNameFrFromCode(char *code)
{
  char *strState;

  if (!WicriBresilCode2StateNameFr)
    {
      if (!bufName)  bufName=NewBuffer();
      BufferStrcpy(bufName,WicriGetDataRoot());
      BufferStrcat(bufName,"/Bresil/code2etat.dict");
      WicriBresilCode2StateNameFr=StrDictFromFile(BufferString(bufName));
    }
  strState=StrDictSearch(WicriBresilCode2StateNameFr, code);
  return strState;
}

char *WicriBresilGetStateNameFrFromStr(char *code)
{
  char *strState;

  if (!WicriBresilStr2StateNameFr)
    {
      if (!bufName)  bufName=NewBuffer();
      BufferStrcpy(bufName,WicriGetDataRoot());
      BufferStrcat(bufName,"/Bresil/str2etat.dict");
      WicriBresilStr2StateNameFr=StrDictFromFile(BufferString(bufName));
    }
  strState=StrDictSearch(WicriBresilStr2StateNameFr, code);
  return strState;
}

SxmlNode *WicriBresilSetState(SxmlNode *affiliation, char *stateNameFr)
{
  SxmlNode *affCountry;
  SxmlNode *placeNode;
  SxmlNode *placeName;
  SxmlNode *regionNode;

  if (!stateNameFr) return NULL;
  affCountry=SxmlGetFirstChildByTagName(affiliation, "country");
  if (!affCountry) SxmlAppendChild(affiliation, SxmlLeafCreate("country","Brésil"));
  placeName=SxmlElementCreate("placeName");
  SxmlAppendChild(affiliation,placeName);
  SxmlAppendChild(placeName, regionNode=SxmlLeafCreate("region", stateNameFr));
  SxmlSetAttribute (regionNode, "type", "state");
  return placeName;
}

SxmlNode *WicriBresilSetRegionFrFromCode(SxmlNode *affiliation, char *code)
{
  char *stateNameFr;
  SxmlNode *placeName;

  stateNameFr=WicriBresilGetStateNameFrFromCode(code);
  placeName=WicriBresilSetState(affiliation, stateNameFr);
  return placeName;
}

SxmlNode *WicriBresilSetRegionFrFromStr(SxmlNode *affiliation, char *str)
{
  char *stateNameFr;
  SxmlNode *placeName;

  stateNameFr=WicriBresilGetStateNameFrFromStr(str);
  placeName=WicriBresilSetState(affiliation, stateNameFr);
  return placeName;
}


SxmlNode *WicriBresilGetRegionFromField(SxmlNode *affiliation, char *strRegion, char *regionArea)
{
  SxmlNode *retNode;
  static char *codeCountry=NULL;

  if(!codeCountry) codeCountry=malloc(3);

  retNode=WicriBresilSetRegionFrFromCode(affiliation, strRegion);
  if (!retNode)
    {
      if (strlen(strRegion)>2)
	{
	  retNode=WicriBresilSetRegionFrFromStr(affiliation, strRegion);
	  if (!retNode)retNode=WicriBresilSetRegionFrFromCode(affiliation, strRegion+strlen (strRegion)-2);
	}
    }
  if (!retNode)
    {
      /*
      codeCountry=strncpy(codeCountry, strRegion,2);
      retNode=WicriBresilSetRegionFrFromCode(affiliation, codeCountry);
      */
    }
  if (retNode) 
    {
      SxmlSetAttribute(affiliation, "wicri:level", "2");
      return retNode;
    }
  return NULL;
}
