import Canvas from "../../hampsterengine/src/canvas.js";
import Engine from "../../hampsterengine/src/engine.js";

import SoundBox from "./sb-player-small";
// import {mus_DEMOSONG} from "./songs/DEMOSONGDONOTCOMMIT";

// Rooms
import {rm_mainMenu} from "./rooms/mainMenu";
import {rm_game} from "./rooms/game";
import {rm_DEBUG_button} from "./rooms/debug_button";
import {rm_DEBUG_mouse} from "./rooms/debug_mouse";
import {rm_DEBUG_music} from "./rooms/debug_music";
import {rm_DEBUG_INCURSION} from "./rooms/debug_incursion";

// Music

const canvas = new Canvas('canvas');
const engine = new Engine(canvas);
const assets = engine.assetStore;

// assets.addSoundBoxAudio('mus_DEMO', mus_DEMOSONG, new SoundBox());

canvas.width = 640;
canvas.height = 480;
canvas.pixelRatio = 2;
canvas.ctx.setTransform(canvas.pixelRatio, 0, 0, canvas.pixelRatio, 0, 0);
canvas.ctx.imageSmoothingEnabled = false;

let lastClickPos = {
    x: 0, y: 0
}

window.lastClickPos = lastClickPos;

engine.registerRoom(rm_mainMenu, 'mainMenu');
engine.registerRoom(rm_game, 'game');

//Debug rooms. Comment out to not include in build (esbuild will not import them if they arent used)
engine.registerRoom(rm_DEBUG_button, 'debug_button');
engine.registerRoom(rm_DEBUG_mouse, 'debug_mouse');
engine.registerRoom(rm_DEBUG_music, 'debug_music');
engine.registerRoom(rm_DEBUG_INCURSION, 'debug_incursion')

function main() {
    requestAnimationFrame(main);
    engine.frames++;
    canvas.fill(engine.room.bgColor ?? 'black');

    engine.step();
    engine.draw();
    engine.drawGui();

    engine.drawCursor();
}

console.debug(engine.rooms);

if (document.location.hash) {
    console.log('Requesting room', document.location.hash.substring(1));
    engine.loadDelay = 0;
    engine.room = engine.getRoomIndex(document.location.hash.substring(1));
} else {
    engine.room = engine.getRoomIndex('mainMenu');
}

// Ensure assets are loaded.
function load() {
    if (engine.loading) {
        engine.loadLoop();
        setTimeout(load, 1000/60);
    } else {
        main();
    }
}

load();