// • ▌ ▄ ·.  ▄▄▄·  ▄▄ • ▪   ▄▄· ▄▄▄▄·  ▄▄▄·  ▐▄▄▄  ▄▄▄ .
// ·██ ▐███▪▐█ ▀█ ▐█ ▀ ▪██ ▐█ ▌▪▐█ ▀█▪▐█ ▀█ •█▌ ▐█▐▌·
// ▐█ ▌▐▌▐█·▄█▀▀█ ▄█ ▀█▄▐█·██ ▄▄▐█▀▀█▄▄█▀▀█ ▐█▐ ▐▌▐▀▀▀
// ██ ██▌▐█▌▐█ ▪▐▌▐█▄▪▐█▐█▌▐███▌██▄▪▐█▐█ ▪▐▌██▐ █▌▐█▄▄▌
// ▀▀  █▪▀▀▀ ▀  ▀ ·▀▀▀▀ ▀▀▀·▀▀▀ ·▀▀▀▀  ▀  ▀ ▀▀  █▪ ▀▀▀
//      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 tradeRequest(TradeRequestMsg msg, ClientConnection origin) {

        PlayerCharacter source = origin.getPlayerCharacter();

        if (source == null)
            return;

        source.getCharItemManager().tradeRequest(msg);

    }


    public static void acceptTradeRequest(AcceptTradeRequestMsg msg, ClientConnection origin) {

        PlayerCharacter source = origin.getPlayerCharacter();

        if (source == null)
            return;

        try {
            source.getCharItemManager().acceptTradeRequest(msg);
        } catch (Exception e) {
            Logger.error(e);
            // TODO Auto-generated catch block
        }

    }

    public static void rejectTradeRequest(RejectTradeRequestMsg msg, ClientConnection origin) {
        // TODO Do nothing? If so, delete this method & case above
    }

    public static void addItemToTradeWindow(AddItemToTradeWindowMsg msg, ClientConnection origin) {


        PlayerCharacter source = origin.getPlayerCharacter();
        if (source == null || !source.isAlive())
            return;
        try {
            source.getCharItemManager().addItemToTradeWindow(msg);

        } catch (Exception e) {
            Logger.error(e);
        }

    }

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

        PlayerCharacter source = origin.getPlayerCharacter();

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


        CharacterItemManager sourceItemMan = source.getCharItemManager();

        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.getCharItemManager();

        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.getCharItemManager();

        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.getCharItemManager();

        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);

    }
}