import path from 'path';
import fs from 'fs/promises';
import { b64 } from './html';

export async function isGame(name: string | null | undefined) {
    if (!name || name === 'index') return false;

    const dir = path.resolve(import.meta.dir, '..', 'src', 'games', name);

    if (!await fs.exists(dir)) return false;

    const stat = await fs.stat(dir);

    return stat.isDirectory();
}

export interface Game {
    name: string;
    iconUrl?: string;
}

export async function getGames(): Promise<Game[]> {
    const dir = path.resolve(import.meta.dir, '..', 'src', 'games');
    if (!await fs.exists(dir)) return [];

    const stat = await fs.stat(dir);
    if (!stat.isDirectory()) return [];

    const list = await fs.readdir(dir);
    const gameNames = list.filter(d => d !== 'index').sort();

    const games: Game[] = [];
    for (const name of gameNames) {
        const gameDir = path.resolve(dir, name);
        const pwaIconFile = Bun.file(path.resolve(gameDir, 'assets', 'pwa_icon.png'));
        const iconFile = Bun.file(path.resolve(gameDir, 'assets', 'favicon.ico'));
        let iconUrl: string | undefined;
        if (await pwaIconFile.exists()) {
            iconUrl = `data:image/png;base64,${await b64(pwaIconFile)}`;
        } else if (await iconFile.exists()) {
            iconUrl = `data:image/x-icon;base64,${await b64(iconFile)}`;
        }
        games.push({ name, iconUrl });
    }
    return games;
}