using System.Text;

namespace SharpChat.SockChat.S2CPackets;

public class ChatMessageAddS2CPacket(
    long msgId,
    DateTimeOffset created,
    string userId,
    string text,
    bool isAction,
    bool isPrivate
) : S2CPacket {
    public string Pack() {
        StringBuilder sb = new();

        sb.Append("2\t");

        sb.Append(created.ToUnixTimeSeconds());
        sb.Append('\t');

        sb.Append(userId);
        sb.Append('\t');

        if(isAction)
            sb.Append("<i>");

        sb.Append(
            text.Replace("<", "&lt;")
                .Replace(">", "&gt;")
                .Replace("\n", " <br/> ")
                .Replace("\t", "    ")
        );

        if(isAction)
            sb.Append("</i>");

        sb.Append('\t');
        sb.Append(msgId);
        sb.AppendFormat(
            "\t1{0}0{1}{2}",
            isAction ? '1' : '0',
            isAction ? '0' : '1',
            isPrivate ? '1' : '0'
        );

        return sb.ToString();
    }
}