import Packet from "../packet";
import Stream from "../stream";

export enum GroupStatus {
    JOINED = 0,
    INVALID = 1,
    NOT_JOINED = 2,
    BANNED = 3
}

export class PacketGroupJoin extends Packet {

    private groupId: string = "";
    private groupStatus: GroupStatus = GroupStatus.NOT_JOINED;
    /**
     * Строка группы, которая содержит информацию о группе, такую как ее название, описание и ключ
     * Строка зашифрована обратимым шифрованием, где ключом выступает - реальный приватный ключ
     * входящего в группу клиента. Нужно это для будущей синхронзации, так как клиенту на его другом
     * устройстве нужно получить ключ группы и ее информацию. Сервер расшифровать эту строку не может. Эту
     * строку может расшифровать только клиент, так как она зашифрована его приватным ключом
     */
    private groupString: string = "";

    public getPacketId(): number {
        return 0x14;
    }

    public _receive(stream: Stream): void {
        this.groupId = stream.readString();
        this.groupStatus = stream.readInt8();
        this.groupString = stream.readString();
    }

    public _send(): Promise<Stream> | Stream {
        const stream = new Stream();
        stream.writeInt16(this.getPacketId());
        stream.writeString(this.groupId);
        stream.writeInt8(this.groupStatus);
        stream.writeString(this.groupString);
        return stream;
    }

    public setGroupId(groupId: string) {
        this.groupId = groupId;
    }

    public getGroupId(): string {
        return this.groupId;
    }

    public setGroupStatus(groupStatus: GroupStatus) {
        this.groupStatus = groupStatus;
    }

    public getGroupStatus(): GroupStatus {
        return this.groupStatus;
    }

    public setGroupString(groupString: string) {
        this.groupString = groupString;
    }

    public getGroupString(): string {
        return this.groupString;
    }
    
}