package engine.net.client.handlers;

import engine.exception.MsgSendException;
import engine.gameManager.BuildingManager;
import engine.gameManager.SessionManager;
import engine.mbEnums;
import engine.net.Dispatch;
import engine.net.DispatchMessage;
import engine.net.client.ClientConnection;
import engine.net.client.msg.ArcViewAssetTransactionsMsg;
import engine.net.client.msg.ClientNetMsg;
import engine.objects.Building;
import engine.objects.City;
import engine.objects.PlayerCharacter;
import engine.objects.Warehouse;

/*
 * @Author:
 * @Summary: Processes application protocol message which transfers
 * gold between a building's strongbox and a player character.
 */

public class ArcViewAssetTransactionsMsgHandler extends AbstractClientMsgHandler {

    public ArcViewAssetTransactionsMsgHandler() {
        super(ArcViewAssetTransactionsMsg.class);
    }

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

        PlayerCharacter player;
        ArcViewAssetTransactionsMsg msg;
        ArcViewAssetTransactionsMsg newMsg;
        player = SessionManager.getPlayerCharacter(origin);
        Dispatch dispatch;

        if (player == null)
            return true;

        msg = (ArcViewAssetTransactionsMsg) baseMsg;

        Building warehouseBuilding = BuildingManager.getBuilding(msg.getWarehouseID());
        City city = warehouseBuilding.getCity();

        if (city == null)
            return true;

        Warehouse warehouse = city.warehouse;

        if (warehouse == null)
            return true;

        newMsg = new ArcViewAssetTransactionsMsg(warehouse, msg);
        newMsg.configure();

        dispatch = Dispatch.borrow(player, newMsg);
        DispatchMessage.dispatchMsgDispatch(dispatch, mbEnums.DispatchChannel.SECONDARY);

        return true;
    }

}