module mars.protoinsertvaluerequest;


import std.conv;

import mars.client;
import mars.msg;
import mars.server : indexStatementFor;

void protoInsertValueRequest(S)(MarsClient* client, S socket)
{
    import msgpack : unpack, pack;

    auto insertValueRequest = socket.binaryAs!InsertValuesRequest;

    int tableIndex = insertValueRequest.statementIndex;

    InsertError err;
    auto reply = client.vueInsertRecord(insertValueRequest.statementIndex, insertValueRequest.bytes, err);
    
    auto replyMsg = InsertValuesReply(
        cast(int)(err), 
        reply[0], 
        reply[1], 
        tableIndex,
    );
    if( err == InsertError.inserted ){
        replyMsg.statementIndex = indexStatementFor(tableIndex, "update").to!int;
        replyMsg.statementIndex2 = indexStatementFor(tableIndex, "updateDecorations").to!int;
    }
    else {
        replyMsg.statementIndex = indexStatementFor(tableIndex, "updateDecorations").to!int;
        replyMsg.statementIndex2 = indexStatementFor(tableIndex, "delete").to!int;
    }
    socket.sendReply(insertValueRequest, replyMsg);
}