#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>
#include <string.h>

#include "Config.h"
#include "Define/define.h"
#include "ShareMemory/shmMem.h"
//------------------------------------------------------------------------------
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, uint32_t start, uint32_t cnt)
{
    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);
    }
}

bool IntoChargeProcess(int status)
{
    if ((status >= S_AUTHORIZING && status <= S_CHARGING) ||
        status == S_CCS_PRECHARGE_ST0 || status == S_CCS_PRECHARGE_ST1) {
        return TRUE;
    }
    return FALSE;
}

bool IntoOperateProcess(int status)
{
    if ((status >= S_AUTHORIZING && status <= S_ALARM) ||
        status == S_CCS_PRECHARGE_ST0 || status == S_CCS_PRECHARGE_ST1) {
        return TRUE;
    }
    return FALSE;
}

char* GetStatusName(int status)
{
    switch (status) {
        case S_BOOTING: return "BOOTING"; break;
        case S_IDLE:     return "IDLE"; break;
        case S_AUTHORIZING: return "AUTHORIZING"; break;
        case S_REASSIGN_CHECK: return "REASSIGN_CHECK"; break;
        case S_REASSIGN: return "REASSIGN"; break;
        case S_PREPARNING: return "PREPARING"; break;
        case S_PREPARING_FOR_EV: return "PREPARING_FOR_EV"; break;
        case S_PREPARING_FOR_EVSE: return "PREPARING_FOR_EVSE"; break;
        case S_CHARGING: return "CHARGING"; break;
        case S_TERMINATING: return "TERMINATING"; break;
        case S_COMPLETE: return "COMPLETE"; break;
        case S_ALARM: return "ALARM"; break;
        case S_FAULT: return "FAULT"; break;
        case S_RESERVATION: return "RESERVATION"; break;
        case S_BOOKING: return "BOOKNG"; break;
        case S_MAINTAIN: return "MAINTAIN"; break;
        case S_DEBUG: return "DEBUG"; break;
        case S_CCS_PRECHARGE_ST0: return "CCS_PRECHARGE_ST0"; break;
        case S_CCS_PRECHARGE_ST1: return "CCS_PRECHARGE_ST1"; break;
        case S_UPDATE: return "UPDATE"; break;
        case S_NONE: return "NONE"; break;
    }
    return "";
}