package protocolsupport.protocol.storage.netcache.window;

import protocolsupport.protocol.typeremapper.window.WindowRemapper;
import protocolsupport.protocol.types.WindowType;
import protocolsupport.utils.Utils;

public class WindowCache {

	protected static final byte WINDOW_ID_PLAYER = 0;

	protected WindowType windowType = WindowType.PLAYER;
	protected byte windowId = WINDOW_ID_PLAYER;

	protected WindowRemapper playerWindowRemapper;
	protected WindowRemapper windowRemapper;
	protected Object windowMetadata;

	public void setPlayerWindow(WindowRemapper playerWindowRemaper) {
		this.playerWindowRemapper = playerWindowRemaper;
		this.windowRemapper = playerWindowRemaper;
	}

	public void setOpenedWindow(byte windowId, WindowType windowType, WindowRemapper windowRemapper) {
		this.windowId = windowId;
		this.windowType = windowType;
		this.windowRemapper = windowRemapper;
		this.windowMetadata = windowRemapper.createWindowMetadata();
	}

	public WindowType getOpenedWindowType() {
		return windowType;
	}

	public boolean isValidWindowId(int windowId) {
		return windowId == this.windowId;
	}

	public WindowRemapper getPlayerWindowRemapper() {
		return playerWindowRemapper;
	}

	public WindowRemapper getOpenedWindowRemapper() {
		return windowRemapper;
	}

	public Object getOpenedWindowMetadata() {
		return windowMetadata;
	}

	public void closeWindow() {
		this.windowId = WINDOW_ID_PLAYER;
		this.windowType = WindowType.PLAYER;
		this.windowRemapper = playerWindowRemapper;
		this.windowMetadata = null;
	}

	@Override
	public String toString() {
		return Utils.toStringAllFields(this);
	}

}