using System;
using System.Collections.Generic;
using System.Text;

namespace SharpChat.Packet {
    public enum UserDisconnectReason {
        Leave,
        TimeOut,
        Kicked,
        Flood,
    }

    public class UserDisconnectPacket(DateTimeOffset disconnected, ChatUser user, UserDisconnectReason reason) : ServerPacket {
        public ChatUser User { get; private set; } = user ?? throw new ArgumentNullException(nameof(user));

        public override IEnumerable<string> Pack() {
            StringBuilder sb = new();

            sb.Append('3');
            sb.Append('\t');
            sb.Append(User.UserId);
            sb.Append('\t');
            sb.Append(User.LegacyNameWithStatus);
            sb.Append('\t');

            switch(reason) {
                case UserDisconnectReason.Leave:
                default:
                    sb.Append("leave");
                    break;
                case UserDisconnectReason.TimeOut:
                    sb.Append("timeout");
                    break;
                case UserDisconnectReason.Kicked:
                    sb.Append("kick");
                    break;
                case UserDisconnectReason.Flood:
                    sb.Append("flood");
                    break;
            }

            sb.Append('\t');
            sb.Append(disconnected.ToUnixTimeSeconds());
            sb.Append('\t');
            sb.Append(SequenceId);

            yield return sb.ToString();
        }
    }
}