import type { PublishedReleaseFact } from "./facts";
import { REPO_URL } from "./i18n/links";
import { IDENTITY_PHRASE, SITE_NAME, SITE_URL } from "./page-meta";
import { ORGANIZATION_ID } from "./site-schema";

/**
 * Structured product data for the release-backed install page.
 *
 * Source candidates deliberately do not enter this function: the download URL
 * resolves published artifacts, so softwareVersion must describe that release
 * or be absent when no published release receipt is available.
 */
export function buildSoftwareApplicationJsonLd(
  publishedRelease: Pick<PublishedReleaseFact, "version"> | null,
) {
  return {
    "@context": "https://schema.org",
    "@type": "SoftwareApplication",
    name: SITE_NAME,
    url: SITE_URL,
    description: IDENTITY_PHRASE,
    applicationCategory: "DeveloperApplication",
    operatingSystem: "macOS, Linux, Windows, Android",
    ...(publishedRelease?.version ? { softwareVersion: publishedRelease.version } : {}),
    license: `${REPO_URL}/blob/main/LICENSE`,
    codeRepository: REPO_URL,
    downloadUrl: `${SITE_URL}/en/install`,
    author: { "@id": ORGANIZATION_ID },
  };
}