#include <stdio.h>

#include "cmd_console.h"
#include "cmd_monitor.h"
#include "cmd_remote.h"
#include "cmd_file.h"
#include "ulog_api.h"
#include "s2j/s2j.h"

#define LOGGING_MODULE_NAME     "logging"

typedef int (*cmd_cb)(cJSON *, int, char **);

typedef struct _log_cmd {
    char  cmd[20];
    cmd_cb cb;
} log_cmd_t;

ulog_t *g_log;
log_cmd_t g_log_cmd[] = {
    {"console", conf_console},
    {"monitor", conf_monitor},
    {"host", conf_remote},
    {"trap", conf_remote_level},
    {"file", conf_file}
};

log_cmd_t *get_cb_by_cmd(const char *cmd) 
{
    for (int i = 0; i < (sizeof(g_log_cmd) / sizeof(log_cmd_t)); i++) {
        if (strcasecmp(cmd, g_log_cmd[i].cmd) == 0) {
            return &g_log_cmd[i];
        }
    }

    return NULL;
}

int main(int argc, char **argv)
{
    int ret = -1;
    if (argc < 2) {
        fprintf(stdout, "Parameter too few");
        return ret;
    }  

    g_log = ulog_init(LOGGING_MODULE_NAME, 1);
    if (g_log == NULL) {
        fprintf(stderr, "Initiating ulog is failure");
        return ret;
    }

    log_cmd_t *log_cmd = get_cb_by_cmd(argv[1]);
    if (log_cmd == NULL) {
        ulog_close(g_log);
        ULOG_WARNING(g_log, "Not find logging cmd:%s", argv[1]); 
        return -1;
    }

    s2j_create_json_obj(json_obj);
    if(json_obj == NULL)
    {        
        ULOG_ERR(g_log, "Creating json object is failure");       
        goto END;
    }

    if (log_cmd->cb(json_obj, argc, argv) != 0) {
        ULOG_ERR(g_log, "Configuring %s is failure", log_cmd->cmd);
        goto END;
    }

    ret = 0;
END:
    if(json_obj != NULL) {        
        cJSON_Delete(json_obj);
    }
    ulog_close(g_log);                         
    return ret;
}