import { FileInfo } from "@/utils/io/file-info";
import { VersionType } from "@/utils/versioning/version-type";
import { ModrinthVersionInit, packModrinthVersionInit } from "@/platforms/modrinth/modrinth-version";
import { ModrinthDependencyType } from "@/platforms/modrinth";

describe("packModrinthVersionInit", () => {
    test("packs a ModrinthVersionInit object and resolves default values", () => {
        const version = {
            project_id: "QQQQQQQQ",
            version_number: "1.0.0",
        } as ModrinthVersionInit;

        const expected = {
            data: {
                project_id: "QQQQQQQQ",
                version_number: "1.0.0",
                name: "1.0.0",
                version_type: VersionType.RELEASE,
                featured: true,
                dependencies: [],
                game_versions: [],
                loaders: [],
                primary_file: undefined,
                file_parts: [],
            },
        };

        expect(packModrinthVersionInit(version)).toEqual(expected);
    });

    test("packs a ModrinthVersionInit object", () => {
        const version = {
            project_id: "QQQQQQQQ",
            version_number: "1.0.0",
            name: "Version 1.0.0",
            version_type: VersionType.ALPHA,
            featured: false,
            dependencies: [{ project_id: "fabric-api", dependency_type: ModrinthDependencyType.REQUIRED }],
            game_versions: ["1.16", "1.17"],
            loaders: ["loader1", "loader2"],
            files: ["file1", "file2"],
        } as ModrinthVersionInit;

        const expected = {
            data: {
                project_id: "QQQQQQQQ",
                version_number: "1.0.0",
                name: "Version 1.0.0",
                version_type: VersionType.ALPHA,
                featured: false,
                dependencies: [{ project_id: "fabric-api", dependency_type: ModrinthDependencyType.REQUIRED }],
                game_versions: ["1.16", "1.17"],
                loaders: ["loader1", "loader2"],
                primary_file: "_0",
                file_parts: ["_0", "_1"],
            },

            _0: FileInfo.of("file1"),
            _1: FileInfo.of("file2"),
        };

        expect(packModrinthVersionInit(version)).toEqual(expected);
    });
});