import type { Service } from '../types';
import type { SceneLike } from './Scenes';

/** No-op implementation of the scenes service. */
export default class NullScenes implements Service
{
    public name = 'NullScenes';
    public readonly serviceType = 'scenes';

    public add(_key: string, _scene: SceneLike): void {}
    public create(_sceneName: string): SceneLike | undefined
    {
        return undefined;
    }

    public get(_sceneName: string): SceneLike | undefined
    {
        return undefined;
    }

    public load(): Promise<unknown>
    {
        return Promise.resolve(undefined);
    }

    public pause(_sceneName: string): SceneLike | undefined
    {
        return undefined;
    }

    public pauseAllUpdatingScenes(): void {}

    public remove(_sceneName: string): void {}

    public resume(_sceneName: string): SceneLike | undefined
    {
        return undefined;
    }

    public resumeAllUpdatingScenes(): void {}

    public run(_sceneName: string): SceneLike | undefined
    {
        return undefined;
    }

    public sleep(_sceneName: string): SceneLike | undefined
    {
        return undefined;
    }

    public stop(_sceneName: string): SceneLike | undefined
    {
        return undefined;
    }

    public stopAll(..._exceptionScenes: string[]): void {}

    public update(_dt: number): void {}

    public wake(_sceneName: string): SceneLike | undefined
    {
        return undefined;
    }

    public resize(_resizeData: unknown): void {}

    public getUpdatingSceneNames(): string[]
    {
        return [];
    }

    public dispose(): void {}
}
