package net.mcft.copy.backpacks.network;

import io.netty.buffer.ByteBuf;

import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.network.PacketBuffer;

import net.minecraftforge.fml.common.network.simpleimpl.IMessage;
import net.minecraftforge.fml.common.network.simpleimpl.MessageContext;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;

import net.mcft.copy.backpacks.WearableBackpacks;
import net.mcft.copy.backpacks.config.Setting;

/** Synchronizes config settings to players joining a world. */
public class MessageSyncSettings implements IMessage {
	
	private NBTTagCompound _data;
	
	public MessageSyncSettings() {  }
	
	public static MessageSyncSettings create() {
		MessageSyncSettings message = new MessageSyncSettings();
		message._data = new NBTTagCompound();
		for (Setting<?> setting : WearableBackpacks.CONFIG.getSettings())
			if (setting.doesSync() && setting.isEnabled())
				message._data.setTag(setting.getFullName(), setting.writeSynced());
		return message;
	}
	
	@Override
	public void fromBytes(ByteBuf buf) {
		PacketBuffer buffer = new PacketBuffer(buf);
		try { _data = buffer.readCompoundTag(); }
		catch (Exception ex) { _data = null; }
	}
	
	@Override
	public void toBytes(ByteBuf buf) {
		PacketBuffer buffer = new PacketBuffer(buf);
		buffer.writeCompoundTag(_data);
	}
	
	public static class Handler extends BackpacksMessageHandler<MessageSyncSettings> {
		@Override
		public boolean isScheduled() { return false; }
		@Override
		@SideOnly(Side.CLIENT)
		public void handle(MessageSyncSettings message, MessageContext ctx)
			{ WearableBackpacks.CONFIG.syncSettings(message._data); }
	}
	
}