// Copyright (c) 2023 Timothy Schenk. Subject to the GNU AGPL Version 3 License.

using MassTransit;
using Wonderking.Packets;

namespace Continuity.AuthServer.Packets;

[MessageUrn("packets")]
public class RawPacket
{
    public RawPacket(OperationCode operationCode, Span<byte> messageBody, uint aliveTime, byte unknownValue2,
        byte unknownValue, Guid sessionId, AuthSession session)
    {
        MessageBody = messageBody.ToArray();
        UnknownValue2 = unknownValue2;
        UnknownValue = unknownValue;
        SessionId = sessionId;
        Session = session;
        OperationCode = operationCode;
        /*
         *  20s = 5
         *  15s = 4
         *  10s = 3
         *  client alive time * 5s => uptime
         */
        ClientAliveTime = TimeSpan.FromSeconds(5 * aliveTime);
    }

    public OperationCode OperationCode { get; }
    public byte[] MessageBody { get; }
    public TimeSpan ClientAliveTime { get; }
    public byte UnknownValue { get; }
    public byte UnknownValue2 { get; }
    public Guid SessionId { get; }

    public AuthSession Session { get; }
}