/*
 * Common.h
 *
 *  Created on: 2021年8月7日
 *      Author: Wendell
 */

#ifndef COMMON_H_
#define COMMON_H_

#include <time.h>
#include <stdbool.h>

#define ARRAY_SIZE(A)               (sizeof(A) / sizeof(A[0]))
#define PASS                        1
#define WAIT                        0
#define FAIL                        -1
#define YES                         1
#define NO                          0
#define ON                          1
#define OFF                         0
#define true                        1
#define false                       0
#define NORMAL                      0
#define ABNORMAL                    1
#define EQUAL                       0

#define MODELNAME_LENGTH            14
#define SERIAL_NUMBER_LENGTH        11
#define SYSTEM_ID_LENGTH            64

#define LOG_INFO(format, args...) StoreSysLogMsg("[%s:%4d][%s][Info] "format, (strrchr(__FILE__, '/') ? strrchr(__FILE__, '/') + 1 : __FILE__), __LINE__, __FUNCTION__, ##args)
#define LOG_WARN(format, args...) StoreSysLogMsg("[%s:%4d][%s][Warn] "format, (strrchr(__FILE__, '/') ? strrchr(__FILE__, '/') + 1 : __FILE__), __LINE__, __FUNCTION__, ##args)
#define LOG_ERROR(format, args...) StoreSysLogMsg("[%s:%4d][%s][Erro] "format, (strrchr(__FILE__, '/') ? strrchr(__FILE__, '/') + 1 : __FILE__), __LINE__, __FUNCTION__, ##args)
#define LOG_DBG(format, args...) StoreSysLogMsg("[%s:%4d][%s][Debg] "format, (strrchr(__FILE__, '/') ? strrchr(__FILE__, '/') + 1 : __FILE__), __LINE__, __FUNCTION__, ##args)
#define PSU_LOG(format, args...) StorePsuLogMsg("[%s:%4d][%s][Info] "format, (strrchr(__FILE__, '/') ? strrchr(__FILE__, '/') + 1 : __FILE__), __LINE__, __FUNCTION__, ##args)
#define AUTH_INFO(format, args...) StoreAuthLogMsg("[%s:%4d][%s][Info] "format, (strrchr(__FILE__, '/') ? strrchr(__FILE__, '/') + 1 : __FILE__), __LINE__, __FUNCTION__, ##args)
#define EvMsg_INFO(format, args...) StoreEvCommMsg("[%s:%4d][%s][EvMsg] "format, (strrchr(__FILE__, '/') ? strrchr(__FILE__, '/') + 1 : __FILE__), __LINE__, __FUNCTION__, ##args)
#define Database_INFO(format, args...) StoreDbMsg("[%s:%4d][%s][DB] "format, (strrchr(__FILE__, '/') ? strrchr(__FILE__, '/') + 1 : __FILE__), __LINE__, __FUNCTION__, ##args)
#define Occupancy_INFO(format, args...) StoreOccupancyMsg("[%s:%4d][%s][OF] "format, (strrchr(__FILE__, '/') ? strrchr(__FILE__, '/') + 1 : __FILE__), __LINE__, __FUNCTION__, ##args)
#define ReadCmd_INFO(format, args...) StoreReadCmdLineMsg(" "format, ##args)

#define DB_FILE                     "/Storage/ChargeLog/localCgargingRecord.db"
#define NETWORK_DB_FILE             "/Storage/EventLog/Eventlog.db"

int StoreSysLogMsg(const char *fmt, ...);
int StorePsuLogMsg(const char *fmt, ...);
int StoreAuthLogMsg(const char *fmt, ...);
int StoreEvCommMsg(const char *fmt, ...);
int StoreDbMsg(const char *fmt, ...);
int StoreOccupancyMsg(const char *fmt, ...);
int StoreReadCmdLineMsg(const char *fmt, ...);

void GetClockTime(struct timespec *_now_time);
unsigned long GetTimeoutValue(struct timespec _start_time);
unsigned long GetSecTimeoutValue(struct timespec _start_time);
int StatusCodeCompose(char *oriCode, char *newCode);
void getNowDatetime(unsigned char *data);

int IsModelNameMatch_ForUpdate(char *model_1, char *model_2);
int IsCabinetModelNameLegal(char *modelName);
int IsSerialNumberLegal(char *sn);
int IsSystemIdLegal(char *systemId);

char *strrpc(char *str, char *oldStr, char *newStr);
int StringInStr(char *string , char *key);
int FindStringInStr(char *sourceString, char *key, char *findString);
int Trim_String(char *string , int len);
int Split(char **array, char *strSource, const char *key);
float PriceParsing(char *PriceString, char *ParseKey, char *SplitKey);

char *ShellPriceParsing(char *priceString, char *resultPrice);
float ShellRunningCostParsing(char *runningCostString);
float ShellFinalCostParsing(char *finalCostString);
int GetShellReceiptInfo(char *finalCostString, char *receiptInfo);

float DefaultPriceParsing(char *StringItem);
float GetNowTimePricing(float *price);
float TccDefaultPriceParsing(char *costString, float *price);

unsigned short ParsingRatingPower(char *modelname);
unsigned int getFileCrc32(char *filename);
bool IsAvalibleGunType(char name, unsigned char *type);
void GetFullFirmwareVersion(char *_MainVer, char *_ModelName, char *_FullVer);

//***************************************** No Use *****************************************
float TariffParsing(char *StringItem, char *TariffCode);
float PhTariffParsing(char *StringItem, char *TariffCode);
//***************************************** No Use *****************************************

#endif /* COMMON_H_ */