import { newLixFile, openLixInMemory, toBlob } from "@lix-js/sdk";
import { contentFromDatabase, createInMemoryDatabase, } from "sqlite-wasm-kysely";
import { initDb } from "../database/initDb.js";
/**
 * Creates a new inlang project.
 *
 * The app is responsible for saving the project "whereever"
 * e.g. the user's computer, cloud storage, or OPFS in the browser.
 */
export async function newProject(args) {
    const sqlite = await createInMemoryDatabase({
        readOnly: false,
    });
    initDb({ sqlite });
    try {
        const inlangDbContent = contentFromDatabase(sqlite);
        const lix = await openLixInMemory({ blob: await newLixFile() });
        const { value: lixId } = await lix.db
            .selectFrom("key_value")
            .select("value")
            .where("key", "=", "lix_id")
            .executeTakeFirstOrThrow();
        // write files to lix
        await lix.db
            .insertInto("file")
            .values([
            {
                path: "/db.sqlite",
                data: inlangDbContent,
            },
            {
                path: "/settings.json",
                data: new TextEncoder().encode(JSON.stringify(args?.settings ?? defaultProjectSettings, undefined, 2)),
            },
            {
                path: "/project_id",
                data: new TextEncoder().encode(lixId),
            },
        ])
            .execute();
        const blob = toBlob({ lix });
        lix.sqlite.close();
        return blob;
    }
    catch (e) {
        const error = new Error(`Failed to create new inlang project: ${e}`, {
            cause: e,
        });
        throw error;
    }
    finally {
        sqlite.close();
    }
}
export const defaultProjectSettings = {
    $schema: "https://inlang.com/schema/project-settings",
    baseLocale: "en",
    locales: ["en"],
    modules: [
    // for instant gratification, we're adding common rules
    // "https://cdn.jsdelivr.net/npm/@inlang/message-lint-rule-empty-pattern@latest/dist/index.js",
    // "https://cdn.jsdelivr.net/npm/@inlang/message-lint-rule-missing-translation@latest/dist/index.js",
    // "https://cdn.jsdelivr.net/npm/@inlang/message-lint-rule-without-source@latest/dist/index.js",
    // default to the message format plugin because it supports all features
    // "https://cdn.jsdelivr.net/npm/@inlang/plugin-message-format@latest/dist/index.js",
    // the m function matcher should be installed by default in case Sherlock (VS Code extension) is adopted
    // "https://cdn.jsdelivr.net/npm/@inlang/plugin-m-function-matcher@latest/dist/index.js",
    ],
};
//# sourceMappingURL=newProject.js.map