/*
 * common.c
 *
 *  Created on: 2020�~5��27��
 *      Author: foluswen
 */

#include "Module_OcppBackend.h"


void work(char s[])        // Delete space on start & end
{
	int i,j;

	for(i=0;s[i]==' ';i++);        		// Search first non space

	for(j=0;s[i];)s[j++]=s[i++];        // Delete space in start

	for(i--;s[i]==' ';i--)s[i]='\0';    // Delete space in end
}

char* strchr(const char *p, int ch)
{
    char c;

    c = ch;
    for (;; ++p) {
        if (*p == c)
            return ((char *)p);
        if (*p == '\0')
            return (NULL);
    }
    /* NOTREACHED */
    return NULL;
}

void splitstring(char *src, const char *separator, char **dest,int *num)
{
     char *pNext;
     int count = 0;
     if (src == NULL || strlen(src) == 0)
        return;

     if (separator == NULL || strlen(separator) == 0)
        return;

     pNext = (char *)strtok(src,separator);
     while(pNext != NULL)
     {
          *dest++ = pNext;
          ++count;
         pNext = (char *)strtok(NULL,separator);
    }
    *num = count;
}

char* stringtrim( char * s )
{
    char * p1 = s;
	char * p2 = s;
	while(*p1 != '\0')
	{
		while(*p1 == ' ' || *p1 == '\t' || *p1 == '\"' || *p1 == '\n' || *p1 == '}' || *p1 == '\r')
		{
			if(*p1 != ',')
			{
				p1 ++;
			}
			else
			{
				break;
			}

		}

		if(*p1 != ',')
		{
			* p2 ++ = *p1 ++;
			//printf("p2=%s\n",p2);
		}
		else
		{
			break;
		}

	}
	*p2 = '\0';
	return (s);
}

char* stringtrimspace( char * s )
{
    char * p1 = s;
	char * p2 = s;
	while(*p1 != '\0')
	{
		while(*p1 == ' ') //while(*p1 == ' ' || *p1 == '\t' || *p1 == '\n' || *p1 == '\r')
		{
			p1 ++;

		}

		* p2 ++ = *p1 ++;
		//printf("p2=%s\n",p2);
	}
	*p2 = '\0';
	return (s);
}

int DiffTimeb(struct timeb ST, struct timeb ET)
{
	//return milli-second
	unsigned int StartTime,StopTime;

	StartTime=(unsigned int)ST.time;
	StopTime=(unsigned int)ET.time;
	return (StopTime-StartTime)*1000+ET.millitm-ST.millitm;
}

void trim(char *s)
{
    int i=0, j, k, l=0;

    while((s[i]==' ')||(s[i]=='\t')||(s[i]=='\n'))
        i++;

    j = strlen(s)-1;
    while((s[j]==' ')||(s[j]=='\t')||(s[j]=='\n'))
        j--;

    if(i==0 && j==strlen(s)-1) { }
    else if(i==0) s[j+1] = '\0';
    else {
        for(k=i; k<=j; k++) s[l++] = s[k];
        s[l] = '\0';
    }
}

int mystrcmp(char *p1,char *p2)
{
    while(*p1==*p2)
    {
        if(*p1=='\0' || *p2=='\0')
            break;
        p1++;
        p2++;
    }
    if(*p1=='\0' && *p2=='\0')
        return(PASS);
    else
        return(FAIL);
}

void substr(char *dest, const char* src, unsigned int start, unsigned int cnt)
{
	strncpy(dest, src + start, cnt);
	dest[cnt] = 0;
}

int strposs(char *source, char *substr, int idx)
{
   char stack[strlen(source)];
   int result=0;
   int count=0;

   while(count<=idx)
   {
	   memset(stack,0,sizeof stack);
	   strncpy(stack, source+result, strlen(source)-result);

	   int loc = strcspn(stack, substr);

	   if(loc>0)
		   result += (loc+1);
	   else
		   result = -1;

	   count++;
   }

   return result;
}

void getSubStr(char *dest, char* src, char *split, int idx)
{

	int start = (strposs(src,",",idx)+1);
	int cnt = (strposs(src,",",idx+1)-2)-(strposs(src,",",idx)+1);

	strncpy(dest, src + start, cnt);
	dest[cnt] = 0;
}

void split(char **arr, char *str, const char *del)
{
	char *s = strtok(str, del);

	while(s != NULL)
	{
		*arr++ = s;
		s = strtok(NULL, del);
	}
}

int strpos(char *source, char *substr, int skip)
{
   char stack[strlen(source)];
   strncpy(stack, source+skip, strlen(source)-skip);
   char *p = strstr(stack, substr);
   if (p)
      return p - stack+skip;
   return -1;
}

char* strtrim( char * s )
{
    char * p1 = s;
	char * p2 = s;
	while(*p1 != '\0')
	{
		while(*p1 == '\t' || *p1 == '\n' || *p1 == '\r') //while(*p1 == ' ' || *p1 == '\t' || *p1 == '\n' || *p1 == '\r')
		{
			p1 ++;

		}

		* p2 ++ = *p1 ++;
		//printf("p2=%s\n",p2);
	}
	*p2 = '\0';
	return (s);
}

char* strtrimc( char * s )
{
    char * p1 = s;
	char * p2 = s;
	while(*p1 != '\0')
	{
		while(*p1 == ' ' || *p1 == '\t' || *p1 == '\"' || *p1 == '\n' || *p1 == '}' || *p1 == '\r')
		{
			if(*p1 != ',')
			{
				p1 ++;
			}
			else
			{
				break;
			}
		}

		if(*p1 != ',')
		{
			* p2 ++ = *p1 ++;
			//printf("p2=%s\n",p2);
		}
		else
		{
			break;
		}
	}
	*p2 = '\0';
	return (s);
}

char* random_uuid(char* buf)
{
	uuid_t uuid;

	uuid_generate(uuid);
	uuid_unparse(uuid, buf);

	return 0;
}