// eslint-disable-next-line @typescript-eslint/ban-ts-comment
// @ts-nocheck
import { test, expect } from "vitest";
import { newProject } from "../project/newProject.js";
import { loadProjectInMemory } from "../project/loadProjectInMemory.js";
import { isInSimulatedCurrentBranch, resolveConflictBySelecting, } from "@lix-js/sdk";
import { contentFromDatabase } from "sqlite-wasm-kysely";
test.skip("it should resolve a conflict with the selected change", async () => {
    const project = await loadProjectInMemory({ blob: await newProject() });
    const dbFile = await project.lix.db
        .selectFrom("file")
        .select("id")
        .where("path", "=", "/db.sqlite")
        .executeTakeFirstOrThrow();
    const changes = await project.lix.db
        .insertInto("change")
        .values([
        {
            id: "e59b2fc6-612d-4087-9790-03b2ab724274",
            author: "Anonymous",
            file_id: dbFile.id,
            plugin_key: "inlang-lix-plugin-v1",
            operation: "create",
            type: "bundle",
            value: {
                id: "even_hour_mule_drum",
            },
            created_at: "2024-08-28 20:58:04",
        },
        {
            id: "c0c9e3f3-0eba-4233-813f-e1901401a653",
            author: "Anonymous",
            file_id: dbFile.id,
            plugin_key: "inlang-lix-plugin-v1",
            operation: "create",
            type: "message",
            value: {
                id: "c2684c3d-3e14-47e4-96b7-8d33579bb7e9",
                bundleId: "even_hour_mule_drum",
                locale: "en",
                selectors: [],
            },
            created_at: "2024-08-28 20:58:04",
        },
        {
            id: "b92a634f-1e25-410f-af5a-e8702cc92ef0",
            author: "Anonymous",
            file_id: dbFile.id,
            plugin_key: "inlang-lix-plugin-v1",
            operation: "create",
            type: "variant",
            value: {
                id: "6a860f96-0cf3-477c-80ad-7893d8fde852",
                messageId: "c2684c3d-3e14-47e4-96b7-8d33579bb7e9",
                matches: [],
                pattern: [
                    {
                        type: "text",
                        value: "My Awesome Todo App",
                    },
                ],
            },
            created_at: "2024-08-28 20:58:04",
        },
        {
            id: "samuels-change",
            author: "Samuel",
            parent_id: "b92a634f-1e25-410f-af5a-e8702cc92ef0",
            file_id: dbFile.id,
            plugin_key: "inlang-lix-plugin-v1",
            operation: "update",
            type: "variant",
            value: {
                id: "6a860f96-0cf3-477c-80ad-7893d8fde852",
                messageId: "c2684c3d-3e14-47e4-96b7-8d33579bb7e9",
                matches: [],
                pattern: [
                    {
                        type: "text",
                        value: "My awesome lix app",
                    },
                ],
            },
            meta: {
                id: "6a860f96-0cf3-477c-80ad-7893d8fde852",
            },
            created_at: "2024-08-28 21:29:05",
        },
        {
            id: "peters-change",
            author: "Peter",
            parent_id: "b92a634f-1e25-410f-af5a-e8702cc92ef0",
            file_id: dbFile.id,
            plugin_key: "inlang-lix-plugin-v1",
            operation: "update",
            type: "variant",
            value: {
                id: "6a860f96-0cf3-477c-80ad-7893d8fde852",
                messageId: "c2684c3d-3e14-47e4-96b7-8d33579bb7e9",
                matches: [],
                pattern: [
                    {
                        type: "text",
                        value: "You are building an app",
                    },
                ],
            },
            meta: {
                id: "6a860f96-0cf3-477c-80ad-7893d8fde852",
            },
            created_at: "2024-08-28 21:29:35",
        },
    ])
        .returningAll()
        .execute();
    // ---------------
    // Todo inlang sdk should auto write file to lix and differ must be
    // fault tolerant. without this code, the differ captures an old
    // change again
    for (const change of changes) {
        await project.db
            .insertInto(change.type)
            .values(change.value)
            .onConflict((c) => c.doNothing())
            .execute();
    }
    await project.lix.db
        .updateTable("file")
        .set({ data: contentFromDatabase(project._sqlite) })
        .where("path", "=", "/db.sqlite")
        .execute();
    // ---------------
    const conflicts = await project.lix.db
        .insertInto("conflict")
        .values([
        {
            change_id: "samuels-change",
            conflicting_change_id: "peters-change",
            reason: "",
        },
    ])
        .returningAll()
        .execute();
    const changesInCurrentBranchBefore = await project.lix.db
        .selectFrom("change")
        .selectAll()
        .where(isInSimulatedCurrentBranch)
        .execute();
    expect(changesInCurrentBranchBefore.map((c) => c.id)).toEqual([
        changes[0]?.id,
        changes[1]?.id,
        changes[2]?.id,
        "samuels-change",
    ]);
    await resolveConflictBySelecting({
        lix: project.lix,
        conflict: conflicts[0],
        selectChangeId: "peters-change",
    });
    await project.lix.settled();
    const changesInCurrentBranch = await project.lix.db
        .selectFrom("change")
        .selectAll()
        .where(isInSimulatedCurrentBranch)
        .execute();
    expect(changesInCurrentBranch.map((c) => c.id)).toEqual([
        changes[0]?.id,
        changes[1]?.id,
        changes[2]?.id,
        "peters-change",
    ]);
});
//# sourceMappingURL=resolveConflictBySelecting.test.js.map