"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.setupManifest = setupManifest;
exports.buildManifest = buildManifest;
const StartSdk_1 = require("../StartSdk");
const package_json_1 = require("../../package.json");
/**
 * @description Use this function to define critical information about your package
 *
 * @param manifest Static properties of the package
 */
function setupManifest(manifest) {
    return manifest;
}
/**
 * Build the final publishable manifest by combining the SDK manifest definition
 * with version graph metadata, OS version, SDK version, and computed fields
 * (migration ranges, hardware requirements, alerts, etc.).
 *
 * @param versions - The service's VersionGraph, used to extract the current version, release notes, and migration ranges
 * @param manifest - The SDK manifest definition (from `setupManifest`)
 * @returns A fully resolved Manifest ready for packaging
 */
function buildManifest(versions, manifest) {
    const images = Object.entries(manifest.images).reduce((images, [k, v]) => {
        v.arch = v.arch ?? ['aarch64', 'x86_64', 'riscv64'];
        if (v.emulateMissingAs === undefined)
            v.emulateMissingAs = v.arch.includes('x86_64')
                ? 'x86_64'
                : (v.arch[0] ?? null);
        v.nvidiaContainer = !!v.nvidiaContainer;
        images[k] = v;
        return images;
    }, {});
    return {
        ...manifest,
        gitHash: null,
        osVersion: manifest.osVersion ?? StartSdk_1.OSVersion,
        sdkVersion: package_json_1.version,
        version: versions.current.options.version,
        releaseNotes: versions.current.options.releaseNotes,
        satisfies: versions.current.options.satisfies || [],
        canMigrateTo: versions.canMigrateTo().toString(),
        canMigrateFrom: versions.canMigrateFrom().toString(),
        images,
        alerts: {
            install: manifest.alerts?.install || null,
            update: manifest.alerts?.update || null,
            uninstall: manifest.alerts?.uninstall || null,
            restore: manifest.alerts?.restore || null,
            start: manifest.alerts?.start || null,
            stop: manifest.alerts?.stop || null,
        },
        hardwareRequirements: {
            device: manifest.hardwareRequirements?.device || [],
            ram: manifest.hardwareRequirements?.ram || null,
            arch: Object.values(images).reduce((arch, inputSpec) => {
                if (inputSpec.emulateMissingAs) {
                    return arch;
                }
                if (arch === null) {
                    return inputSpec.arch;
                }
                return arch.filter((a) => inputSpec.arch.includes(a));
            }, null),
        },
        hardwareAcceleration: manifest.hardwareAcceleration ?? false,
        plugins: manifest.plugins ?? [],
    };
}
//# sourceMappingURL=setupManifest.js.map