import {
	setPixelsInRect,
	clearScreen,
	fillRect,
} from "./window.ts";
import { font } from "./font.ts";
// import { keyDown, keyPressed, keyReleased } from "./keyboard.ts";
import { addToContext } from "./runcode.ts";
import { resetRepl } from "./repl.ts";
import { COLOR } from "./colors.ts";
import { getSheet } from "./sheet.ts";

export const drawSprite = (x: number, y: number, spr: number) => {
	const {sheet_type, value: sprites} = getSheet(2);
	if (sheet_type !== "spritesheet") {
		throw "Trying to run a non-code sheet as code."
	}
	setPixelsInRect(x, y, 8, sprites[spr]);
}

export const drawIcon = (x: number, y: number, icon: Array<number>, color: number) => {
	setPixelsInRect(x, y, 8, icon.map(n => n*color));
}

export const drawChar = (x: number, y: number, char: string, color: number) => {
	setPixelsInRect(x, y, 4, font[char].map(n => n*color));
}

export const drawText = (x: number, y: number, text: string, color?: number) => {
	[...text].forEach((char, i) => {
		drawChar(x+4*i, y, char, color ?? COLOR.WHITE);
	});
}

const faux = {
	cls: () => {
		resetRepl();
		clearScreen();
	},
	spr: drawSprite,
	txt: drawText,
	rect: fillRect,
	// key_down: keyDown,
	// key_pressed: keyPressed,
	// key_released: keyReleased,
	log: console.log,
	JSON: JSON,
};

for (const key in faux) {
	addToContext(key, faux[key as keyof typeof faux]);
}

export default faux;