/** Minimal surface from the runtime model required by the devtools. */
export interface DevModelLike
{
    isRoundStarted(): boolean;
    isRoundEndProcessing: boolean;
    totalWin: number | null;
    win: number | null;
    balance: number;
    bet: number;
    gameData: unknown;
    waitingForCasinoRoundsNotification: boolean;
    waitingForRestore: boolean;
    waitingForWinProcessing: boolean;
    waitingForModeSwitch: boolean;
}

/** View-model exposing model flags to tweakpane while remaining read-only. */
export class DevViewModel
{
    constructor(private readonly model: DevModelLike) {}

    get isRoundStarted(): boolean
    {
        return this.model.isRoundStarted();
    }

    set isRoundStarted(_v: boolean) {}

    get isRoundEndProcessing(): boolean
    {
        return this.model.isRoundEndProcessing;
    }

    set isRoundEndProcessing(_v: boolean) {}

    get totalWin(): number | null
    {
        return this.model.totalWin;
    }

    set totalWin(_v: number | null) {}

    get win(): number | null
    {
        return this.model.totalWin;
    }

    set win(_v: number | null) {}

    get balance(): number
    {
        return this.model.balance;
    }

    set balance(_v: number) {}

    get bet(): number
    {
        return this.model.bet;
    }

    set bet(_v: number) {}

    get gameData(): unknown
    {
        return this.model.gameData;
    }

    set gameData(_v: unknown) {}

    get waitingForCasinoRoundsNotification(): boolean
    {
        return this.model.waitingForCasinoRoundsNotification;
    }

    set waitingForCasinoRoundsNotification(_v: boolean) {}

    get waitingForRestore(): boolean
    {
        return this.model.waitingForRestore;
    }

    set waitingForRestore(_v: boolean) {}

    get waitingForWinProcessing(): boolean
    {
        return this.model.waitingForWinProcessing;
    }

    set waitingForWinProcessing(_v: boolean) {}

    get waitingForModeSwitch(): boolean
    {
        return this.model.waitingForModeSwitch;
    }

    set waitingForModeSwitch(_v: boolean) {}
}
