import { IMessageDataWrapper, IMessageParser } from '@nitrots/api';

/**
 * Generic ack for any housekeeping action (ban, mute, kick, give-credits,
 * room-close, …). Carries an `actionKey` string so a single event handler
 * can multiplex over many in-flight actions and resolve the right Promise
 * via an `accept` predicate.
 */
export class HousekeepingActionResultParser implements IMessageParser
{
    private _actionKey: string = '';
    private _ok: boolean = false;
    private _actionId: number = 0;
    private _message: string = '';

    public flush(): boolean
    {
        this._actionKey = '';
        this._ok = false;
        this._actionId = 0;
        this._message = '';

        return true;
    }

    public parse(wrapper: IMessageDataWrapper): boolean
    {
        if(!wrapper) return false;

        this._actionKey = wrapper.readString();
        this._ok = wrapper.readBoolean();
        this._actionId = wrapper.readInt();
        this._message = wrapper.readString();

        return true;
    }

    public get actionKey(): string { return this._actionKey; }
    public get ok(): boolean { return this._ok; }
    public get actionId(): number { return this._actionId; }
    public get message(): string { return this._message; }
}
