import { VersionType } from "@/utils/versioning/version-type";
import { FileInfo } from "@/utils/io/file-info";
import { CurseForgeDependencyType } from "@/platforms/curseforge/curseforge-dependency-type";
import { packCurseForgeVersionInit, CurseForgeVersionInit } from "@/platforms/curseforge/curseforge-version";

describe("packCurseForgeVersionInit", () => {
    test("returns correct form data when parent file ID is provided", () => {
        const version: CurseForgeVersionInit = Object.freeze({
            project_id: 0,
            changelog: "Initial release",
            changelog_type: "markdown",
            name: "Version 1.0",
            version_type: VersionType.RELEASE,
            dependencies: [{ slug: "mod-id", type: CurseForgeDependencyType.REQUIRED_DEPENDENCY }],
        });
        const gameVersions = [1, 2, 3];
        const file = "path/to/file";
        const parentFileId = 123;

        const result = packCurseForgeVersionInit(version, gameVersions, file, parentFileId);

        expect(result.file).toBeInstanceOf(FileInfo);
        expect(result.metadata).toEqual({
            changelog: version.changelog,
            changelogType: version.changelog_type,
            displayName: result.file.name,
            parentFileID: parentFileId,
            gameVersions: undefined,
            releaseType: version.version_type,
            relations: undefined,
        });
    });

    test("returns correct form data when parent file ID is not provided", () => {
        const version: CurseForgeVersionInit = Object.freeze({
            project_id: 0,
            changelog: "Initial release",
            changelog_type: "markdown",
            name: "Version 1.0",
            version_type: VersionType.RELEASE,
            dependencies: [{ slug: "mod-id", type: CurseForgeDependencyType.REQUIRED_DEPENDENCY }],
        });
        const gameVersions = [1, 2, 3];
        const file = "path/to/file";

        const result = packCurseForgeVersionInit(version, gameVersions, file);

        expect(result.file).toBeInstanceOf(FileInfo);
        expect(result.metadata).toEqual({
            changelog: version.changelog,
            changelogType: version.changelog_type,
            displayName: version.name,
            parentFileID: undefined,
            gameVersions,
            releaseType: version.version_type,
            relations: { projects: version.dependencies },
        });
    });
});