package engine.net.client.handlers;

import engine.Enum;
import engine.exception.MsgSendException;
import engine.gameManager.DbManager;
import engine.net.Dispatch;
import engine.net.DispatchMessage;
import engine.net.client.ClientConnection;
import engine.net.client.msg.ClientNetMsg;
import engine.net.client.msg.PetitionReceivedMsg;
import engine.objects.Petition;
import engine.objects.PlayerCharacter;

public class PetitionReceivedMsgHandler extends AbstractClientMsgHandler {

    public PetitionReceivedMsgHandler() {
        super(PetitionReceivedMsg.class);
    }

    @Override
    protected boolean _handleNetMsg(ClientNetMsg msg, ClientConnection origin) throws MsgSendException {

        if (msg == null)
            return true;

        PetitionReceivedMsg petitionReceivedMsg = (PetitionReceivedMsg) msg;

        if (origin == null)
            return true;

        PlayerCharacter playerCharacter = origin.getPlayerCharacter();

        if (playerCharacter == null)
            return true;

        Petition petition = new Petition(msg, origin);

        if (petition == null)
            return false;

        try {
            petitionReceivedMsg.petition = 2;
            DbManager.PetitionQueries.WRITE_PETITION_TO_TABLE(petition);
            Dispatch dispatch = Dispatch.borrow(playerCharacter, msg);
            DispatchMessage.dispatchMsgDispatch(dispatch, Enum.DispatchChannel.SECONDARY);

        } catch (Exception e) {
            return false;
        }
        return true;
    }
}