#include <stdlib.h>
//#include "CommonDef.h"
#include "msgHandler.h"
#include "Log.h"
#include "Tlv.h"

//#include "TLVext.h"
//#include "Handlers.h"

namespace vendor {
namespace samsung {
namespace hardware {
namespace security {
namespace drk {

int32_t msg_encode_cli(int32_t cmd, void *param, Bytes& out)
{
    int32_t ret = NOT_ERROR;
    TLV lc_tlv;

    lc_tlv.setMode(TLV_START_EX);
    switch (cmd) {
        case CMD_VND_SAVEFILE: 
        case CMD_VND_APPENDFILE: 
        {
            FILEBLOB *p1 = (FILEBLOB *)param;

            lc_tlv.add(TLV_WFDATA, (uint8_t *)p1->data, p1->data.length());

            lc_tlv.add(TLV_WFNAME, (uint8_t *)p1->name, p1->name.length());

            ret = NOT_ERROR;
        }
        break;
        case CMD_VND_READFILE:
        case CMD_VND_FILESIZE: 
        {
            FILEBLOB *p1 = (FILEBLOB *)param;

            lc_tlv.add(TLV_RFNAME, (uint8_t *)p1->name, p1->name.length());

            ret = NOT_ERROR;
        }
        break;
        default:
            ret = ERR_COMMON_NOT_SUPPORT_CMD;
            break;
    }
    if (ret == NOT_ERROR) {
        lc_tlv.encode(out);
    }
    return ret;
}

int32_t msg_decode_cli(int32_t cmd, Bytes& in, void *param)
{
    int32_t ret = NOT_ERROR;
    TLV   lc_tlv;
    ret = lc_tlv.decode((uint8_t *)in, in.length());
    if (ret != NOT_ERROR) {
        return ret;
    }
    switch (cmd) {
        case CMD_VND_READFILE: {
            FILEBLOB  *p1 = (FILEBLOB *)param;

            ret = lc_tlv.get(TLV_RFDATA, p1->data);
            if (ret != NOT_ERROR) {
                LOGME("Getting file path was failed : %d", ret);
                goto end;
            }

            ret = NOT_ERROR;
        }
        break;
        case CMD_VND_FILESIZE: {
            FILEBLOB  *p1 = (FILEBLOB *)param;

            ret = lc_tlv.get(TLV_RFSIZE, p1->data);
            if (ret != NOT_ERROR) {
                LOGME("Getting file path was failed : %d", ret);
                goto end;
            }
            ret = NOT_ERROR;
        }
        break;
        default:
            ret = ERR_COMMON_NOT_SUPPORT_CMD;
            break;
    }
end:
    return ret;
}

}  // namespace drk
}  // namespace security
}  // namespace hardware
}  // namespace samsung
}  // namespace vendor

