import { api } from "./Api";
class Telemetry {
    game = null;
    scene = null;
    gameObject = null;
    #af = null;

    constructor(mode){
        this.mode = mode;
        this.#af = api.user.tm;
    }
    setGame(game){
        if (this.game == game) { return; }
        if (this.game){
            this.#af('game:leave', this.game, {
                mode: this.mode,
                game: this.game, 
                duration: Math.round(performance.now()/1000) - this.gameStart
            });
        }
        if (game){
            this.#af('game:enter', game, {
                mode: this.mode, 
                game
            });
        }
        this.game = game;
        this.gameStart = Math.round(performance.now()/1000);
    }
    completeGame(game, score){
        this.#af('game:complete', game, { mode: this.mode, game, score });
    }
    setScene(scene){
        if (this.scene == scene) { return; }
        if (this.scene){
            this.#af('scene:leave', this.scene, {
                mode: this.mode,
                duration: Math.round(performance.now()/1000) - this.sceneStart,
                game: this.game, scene: this.scene
            });
        }
        if (scene){
            this.#af('scene:enter', scene, {
                mode: this.mode,
                game: this.game, 
                scene
            });
        }
        this.scene = scene;
        this.sceneStart = Math.round(performance.now()/1000);
    }
    setGameObject(gameObject){
        if (this.gameObject == gameObject) { return; }
        if (this.gameObject){
            this.#af('gameobject:leave', this.gameObject, {
                mode: this.mode,
                duration: Math.round(performance.now()/1000) - this.gameObjectStart,
                game: this.game, scene: this.scene, gameObject: this.gameObject
            });
        }
        if (gameObject){
            this.#af('gameobject:enter', gameObject, {
                mode: this.mode,
                game: this.game, 
                scene: this.scene, 
                gameObject
            });
        }
        this.gameObject = gameObject;
        this.gameObjectStart = Math.round(performance.now()/1000);
    }
    post(action, object, data){
        this.#af('gameobject:' + action, object, {
            mode: this.mode,
            game: this.game, 
            scene: this.scene, 
            gameObject: this.gameObject, 
            data
        });
    }
}

export { Telemetry }