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

/***********************************************************************
*
*        Module   : Tei
*        Fichier  : TeiAuthor.c
*        Auteur   : J. DUCLOY
*        Date     : decembre 2015
*
************************************************************************/

#include "TeiHandler.h"
#include "Utf8Converter.h"
#include <ctype.h>

SxmlNode *TeiAuthorNameFromFirstLastNamesStr(char *firstNameStr, char *lastNameStr)
{
  static Buffer *bufName=NULL;
  static Buffer *bufSort=NULL;
  static Buffer *bufUniq=NULL;
  SxmlNode *teiName;
  char *sortLastName;

  if (!bufName) 
    {
      bufName=NewBuffer();
      bufSort=NewBuffer();
      bufUniq=NewBuffer();
    }

  sortLastName=Utf8NameToWikiSort(lastNameStr);
  BufferStrcpy(bufSort, sortLastName);
  BufferStrcpy(bufUniq, sortLastName);
  if (firstNameStr && (strlen(firstNameStr) > 0))
    {
      int firstNameLen;
      char *sortFirstName;
      BufferStrcpy(bufName, Utf8NameToLower(firstNameStr));
      firstNameLen=strlen(firstNameStr);          /*  testing sth like John X */
      if ((firstNameLen>3)
	  &&(firstNameStr[firstNameLen-2]==' ')
	  &&(isupper(firstNameStr[firstNameLen-1]))) BufferStrcat(bufName, ".");
      if (firstNameLen==1)BufferStrcat(bufName, ".");
      BufferStrcat(bufName, " ");
      BufferStrcat(bufName, Utf8NameToLower(lastNameStr));
      BufferStrcat(bufSort, ", ");
      BufferStrcat(bufUniq, " ");
      sortFirstName=Utf8NameToWikiSort(firstNameStr);
      BufferStrcat(bufSort, sortFirstName);
      BufferCatChar(bufUniq, sortFirstName[0]);
      BufferCatChar(bufUniq, '\0');
    }
  else 
    {
      BufferStrcpy(bufName, lastNameStr);
    }
  
  teiName=SxmlLeafCreate("name", BufferString(bufName));
  SxmlSetAttribute(teiName,  "sortKey", BufferString(bufSort));  /* to be deprecated */
  SxmlSetAttribute(teiName,  "sort",    BufferString(bufSort));
  SxmlSetAttribute(teiName,  "uniqKey", BufferString(bufUniq));
  if (firstNameStr) SxmlSetAttribute(teiName,  "first", Utf8NameToLower(firstNameStr));
  SxmlSetAttribute(teiName,  "last", Utf8NameToLower(lastNameStr));
  return teiName;
}

SxmlNode *TeiAuthorNameFromFirstLastNames(SxmlNode *firstName, SxmlNode *lastName)
{
  char *lastNameStr;
  char *firstNameStr;
  SxmlNode *teiName;
  if (!lastName)return NULL;
  lastNameStr=SxmlLeafText(lastName);
  if (firstName)firstNameStr=SxmlLeafText(firstName);
  else firstNameStr=NULL;
  teiName=TeiAuthorNameFromFirstLastNamesStr(firstNameStr, lastNameStr);
  return teiName;
}

SxmlNode* TeiAuthorNameFromNameString(char *inputName)
{
  char *posSpace;
  SxmlNode *resName;
  static Buffer *bufFirst=NULL;
  posSpace=strrchr(inputName,' ');
  if (posSpace)
    {
      if (!bufFirst) bufFirst=NewBuffer();
      BufferStrncpy(bufFirst, inputName, posSpace-inputName);
      resName=TeiAuthorNameFromFirstLastNamesStr(BufferString(bufFirst), posSpace+1);
    }
  else
    {
      resName=TeiAuthorNameFromFirstLastNamesStr(NULL, inputName);
    }
  return resName;
}

SxmlNode* TeiAuthorNameFromBibString(char *inputName) /* sth like Martin, P. */
{
  char *posComma;
  SxmlNode *resName;
  static Buffer *bufLast=NULL;
  posComma=strrchr(inputName,',');
  if (posComma)
    {
      if (!bufLast) bufLast=NewBuffer();
      BufferStrncpy(bufLast, inputName, posComma-inputName);
      resName=TeiAuthorNameFromFirstLastNamesStr( posComma+2, BufferString(bufLast));
    }
  else
    {
      resName=TeiAuthorNameFromFirstLastNamesStr(NULL, inputName);
    }
  return resName;
}
