// • ▌ ▄ ·.  ▄▄▄·  ▄▄ • ▪   ▄▄· ▄▄▄▄·  ▄▄▄·  ▐▄▄▄  ▄▄▄ .
// ·██ ▐███▪▐█ ▀█ ▐█ ▀ ▪██ ▐█ ▌▪▐█ ▀█▪▐█ ▀█ •█▌ ▐█▐▌·
// ▐█ ▌▐▌▐█·▄█▀▀█ ▄█ ▀█▄▐█·██ ▄▄▐█▀▀█▄▄█▀▀█ ▐█▐ ▐▌▐▀▀▀
// ██ ██▌▐█▌▐█ ▪▐▌▐█▄▪▐█▐█▌▐███▌██▄▪▐█▐█ ▪▐▌██▐ █▌▐█▄▄▌
// ▀▀  █▪▀▀▀ ▀  ▀ ·▀▀▀▀ ▀▀▀·▀▀▀ ·▀▀▀▀  ▀  ▀ ▀▀  █▪ ▀▀▀
//      Magicbane Emulator Project © 2013 - 2022
//                www.magicbane.com

package engine.gameManager;

import engine.Enum;
import engine.net.Dispatch;
import engine.net.DispatchMessage;
import engine.net.client.ClientConnection;
import engine.net.client.msg.*;
import engine.objects.CharacterItemManager;
import engine.objects.PlayerCharacter;
import org.pmw.tinylog.Logger;

public enum TradeManager {

    TRADEMANAGER;

    public static void addGoldToTradeWindow(AddGoldToTradeWindowMsg msg, ClientConnection origin) {

        PlayerCharacter source = origin.getPlayerCharacter();

        if (source == null || !source.isAlive())
            return;


        CharacterItemManager sourceItemMan = source.charItemManager;

        if (sourceItemMan == null)
            return;

        try {
            sourceItemMan.addGoldToTradeWindow(msg);
        } catch (Exception e) {
            Logger.error(e);
        }
    }

    public static void commitToTrade(CommitToTradeMsg msg, ClientConnection origin) {

        PlayerCharacter source = origin.getPlayerCharacter();

        if (source == null || !source.isAlive())
            return;

        CharacterItemManager sourceItemMan = source.charItemManager;

        if (sourceItemMan == null)
            return;

        try {
            sourceItemMan.commitToTrade(msg);
        } catch (Exception e) {
            // TODO Auto-generated catch block
            Logger.error(e);
        }
    }

    public static void uncommitToTrade(UncommitToTradeMsg msg, ClientConnection origin) {

        PlayerCharacter source = origin.getPlayerCharacter();

        if (source == null || !source.isAlive())
            return;

        CharacterItemManager sourceItemMan = source.charItemManager;

        if (sourceItemMan == null)
            return;

        try {
            sourceItemMan.uncommitToTrade(msg);
        } catch (Exception e) {
            // TODO Auto-generated catch block
            Logger.error(e);
        }

    }


    public static void closeTradeWindow(CloseTradeWindowMsg msg, ClientConnection origin) {

        PlayerCharacter source = origin.getPlayerCharacter();

        if (source == null)
            return;

        CharacterItemManager sourceItemMan = source.charItemManager;

        if (sourceItemMan == null)
            return;

        try {
            sourceItemMan.closeTradeWindow(msg, true);
        } catch (Exception e) {
            // TODO Auto-generated catch block
            Logger.error(e);
        }
    }

    public static void invalidTradeRequest(InvalidTradeRequestMsg msg) {
        PlayerCharacter requester = PlayerCharacter.getFromCache(msg.getRequesterID());
        Dispatch dispatch;

        dispatch = Dispatch.borrow(requester, msg);
        DispatchMessage.dispatchMsgDispatch(dispatch, Enum.DispatchChannel.SECONDARY);

    }
}