using FSO.Common.Serialization;
using FSO.Server.Protocol.Voltron.Model;
using Mina.Core.Buffer;

namespace FSO.Server.Protocol.Voltron
{
    public abstract class AbstractVoltronPacket : IVoltronPacket
    {
        public static Sender GetSender(IoBuffer buffer)
        {
            var ariesID = buffer.GetPascalString();
            var masterID = buffer.GetPascalString();
            return new Sender { AriesID = ariesID, MasterAccountID = masterID };
        }

        public static void PutSender(IoBuffer buffer, Sender sender)
        {
            buffer.PutPascalString(sender.AriesID);
            buffer.PutPascalString(sender.MasterAccountID);
        }

        public static IoBuffer Allocate(int size)
        {
            IoBuffer buffer = IoBuffer.Allocate(size);
            buffer.Order = ByteOrder.BigEndian;
            return buffer;
        }

        public abstract VoltronPacketType GetPacketType();
        public abstract void Serialize(IoBuffer output, ISerializationContext context);
        public abstract void Deserialize(IoBuffer input, ISerializationContext context);
    }
}