import { MsgClientType } from "./MsgClientType";
import { MsgType } from "./MsgType";

export abstract class YMSMessage {
    timestamp: number;
    sender: MsgClientType;
    receiver: MsgClientType;
    msgType: MsgType;
    senderClientId: string;

    constructor(sender: MsgClientType, receiver: MsgClientType, msgType: MsgType) {
        this.timestamp = Date.now();
        this.sender = sender;
        this.receiver = receiver;
        this.msgType = msgType;
        this.senderClientId = "";
    }

    equals(o: any): boolean {
        return o instanceof YMSMessage &&
        this.timestamp === o.timestamp &&
        this.sender === o.sender &&
        this.receiver === o.receiver &&
        this.msgType === o.msgType &&
        this.senderClientId === o.senderClientId;
    }

    toString(): string {
        return `YMSMessage{` +
          `timestamp=${this.timestamp}, ` +
          `sender=${MsgClientType[this.sender]}, ` +
          `receiver='${MsgClientType[this.receiver]}, ` +
          `msgType=${MsgType[this.msgType]}, ` +
          `senderClientId='${this.senderClientId}'` +
          `}`;
    }

    public abstract getQoS(): number;
    
    public abstract isRetained(): boolean;

    

}