using System.Text;

namespace SharpChat.SockChat.S2CPackets;

public class UserChannelJoinS2CPacket(
    long msgId,
    string userId,
    string userName,
    ColourInheritable userColour,
    int userRank,
    UserPermissions userPerms
) : S2CPacket {
    public string Pack() {
        StringBuilder sb = new();

        sb.Append("5\t0\t");
        sb.Append(userId);
        sb.Append('\t');
        sb.Append(userName);
        sb.Append('\t');
        sb.Append(userColour);
        sb.Append('\t');
        sb.Append(userRank);
        sb.Append(' ');
        sb.Append(userPerms.HasFlag(UserPermissions.KickUser) ? '1' : '0');
        sb.Append(' ');
        sb.Append(userPerms.HasFlag(UserPermissions.ViewLogs) ? '1' : '0');
        sb.Append(' ');
        sb.Append(userPerms.HasFlag(UserPermissions.SetOwnNickname) ? '1' : '0');
        sb.Append(' ');
        sb.Append(userPerms.HasFlag(UserPermissions.CreateChannel) ? (userPerms.HasFlag(UserPermissions.SetChannelPermanent) ? '2' : '1') : '0');
        sb.Append('\t');
        sb.Append(msgId);

        return sb.ToString();
    }
}