export type FontDefinition = {
  name: string
  title: string
  type: "sans" | "mono" | "serif"
  family: string
  registryVariable: "--font-sans" | "--font-mono" | "--font-serif"
  previewVariable: string
  provider: "google"
  import: string
  dependency: string
  subsets: readonly string[]
  weight?: readonly string[]
}

export const FONT_DEFINITIONS = [
  {
    name: "geist",
    title: "Geist",
    type: "sans",
    family: "'Geist Variable', sans-serif",
    registryVariable: "--font-sans",
    previewVariable: "--font-geist-sans",
    provider: "google",
    import: "Geist",
    dependency: "@fontsource-variable/geist",
    subsets: ["latin"],
  },
  {
    name: "inter",
    title: "Inter",
    type: "sans",
    family: "'Inter Variable', sans-serif",
    registryVariable: "--font-sans",
    previewVariable: "--font-inter",
    provider: "google",
    import: "Inter",
    dependency: "@fontsource-variable/inter",
    subsets: ["latin"],
  },
  {
    name: "noto-sans",
    title: "Noto Sans",
    type: "sans",
    family: "'Noto Sans Variable', sans-serif",
    registryVariable: "--font-sans",
    previewVariable: "--font-noto-sans",
    provider: "google",
    import: "Noto_Sans",
    dependency: "@fontsource-variable/noto-sans",
    subsets: ["latin"],
  },
  {
    name: "nunito-sans",
    title: "Nunito Sans",
    type: "sans",
    family: "'Nunito Sans Variable', sans-serif",
    registryVariable: "--font-sans",
    previewVariable: "--font-nunito-sans",
    provider: "google",
    import: "Nunito_Sans",
    dependency: "@fontsource-variable/nunito-sans",
    subsets: ["latin"],
  },
  {
    name: "figtree",
    title: "Figtree",
    type: "sans",
    family: "'Figtree Variable', sans-serif",
    registryVariable: "--font-sans",
    previewVariable: "--font-figtree",
    provider: "google",
    import: "Figtree",
    dependency: "@fontsource-variable/figtree",
    subsets: ["latin"],
  },
  {
    name: "roboto",
    title: "Roboto",
    type: "sans",
    family: "'Roboto Variable', sans-serif",
    registryVariable: "--font-sans",
    previewVariable: "--font-roboto",
    provider: "google",
    import: "Roboto",
    dependency: "@fontsource-variable/roboto",
    subsets: ["latin"],
  },
  {
    name: "raleway",
    title: "Raleway",
    type: "sans",
    family: "'Raleway Variable', sans-serif",
    registryVariable: "--font-sans",
    previewVariable: "--font-raleway",
    provider: "google",
    import: "Raleway",
    dependency: "@fontsource-variable/raleway",
    subsets: ["latin"],
  },
  {
    name: "dm-sans",
    title: "DM Sans",
    type: "sans",
    family: "'DM Sans Variable', sans-serif",
    registryVariable: "--font-sans",
    previewVariable: "--font-dm-sans",
    provider: "google",
    import: "DM_Sans",
    dependency: "@fontsource-variable/dm-sans",
    subsets: ["latin"],
  },
  {
    name: "public-sans",
    title: "Public Sans",
    type: "sans",
    family: "'Public Sans Variable', sans-serif",
    registryVariable: "--font-sans",
    previewVariable: "--font-public-sans",
    provider: "google",
    import: "Public_Sans",
    dependency: "@fontsource-variable/public-sans",
    subsets: ["latin"],
  },
  {
    name: "outfit",
    title: "Outfit",
    type: "sans",
    family: "'Outfit Variable', sans-serif",
    registryVariable: "--font-sans",
    previewVariable: "--font-outfit",
    provider: "google",
    import: "Outfit",
    dependency: "@fontsource-variable/outfit",
    subsets: ["latin"],
  },
  {
    name: "oxanium",
    title: "Oxanium",
    type: "sans",
    family: "'Oxanium Variable', sans-serif",
    registryVariable: "--font-sans",
    previewVariable: "--font-oxanium",
    provider: "google",
    import: "Oxanium",
    dependency: "@fontsource-variable/oxanium",
    subsets: ["latin"],
  },
  {
    name: "manrope",
    title: "Manrope",
    type: "sans",
    family: "'Manrope Variable', sans-serif",
    registryVariable: "--font-sans",
    previewVariable: "--font-manrope",
    provider: "google",
    import: "Manrope",
    dependency: "@fontsource-variable/manrope",
    subsets: ["latin"],
  },
  {
    name: "space-grotesk",
    title: "Space Grotesk",
    type: "sans",
    family: "'Space Grotesk Variable', sans-serif",
    registryVariable: "--font-sans",
    previewVariable: "--font-space-grotesk",
    provider: "google",
    import: "Space_Grotesk",
    dependency: "@fontsource-variable/space-grotesk",
    subsets: ["latin"],
  },
  {
    name: "montserrat",
    title: "Montserrat",
    type: "sans",
    family: "'Montserrat Variable', sans-serif",
    registryVariable: "--font-sans",
    previewVariable: "--font-montserrat",
    provider: "google",
    import: "Montserrat",
    dependency: "@fontsource-variable/montserrat",
    subsets: ["latin"],
  },
  {
    name: "ibm-plex-sans",
    title: "IBM Plex Sans",
    type: "sans",
    family: "'IBM Plex Sans Variable', sans-serif",
    registryVariable: "--font-sans",
    previewVariable: "--font-ibm-plex-sans",
    provider: "google",
    import: "IBM_Plex_Sans",
    dependency: "@fontsource-variable/ibm-plex-sans",
    subsets: ["latin"],
  },
  {
    name: "source-sans-3",
    title: "Source Sans 3",
    type: "sans",
    family: "'Source Sans 3 Variable', sans-serif",
    registryVariable: "--font-sans",
    previewVariable: "--font-source-sans-3",
    provider: "google",
    import: "Source_Sans_3",
    dependency: "@fontsource-variable/source-sans-3",
    subsets: ["latin"],
  },
  {
    name: "instrument-sans",
    title: "Instrument Sans",
    type: "sans",
    family: "'Instrument Sans Variable', sans-serif",
    registryVariable: "--font-sans",
    previewVariable: "--font-instrument-sans",
    provider: "google",
    import: "Instrument_Sans",
    dependency: "@fontsource-variable/instrument-sans",
    subsets: ["latin"],
  },
  {
    name: "jetbrains-mono",
    title: "JetBrains Mono",
    type: "mono",
    family: "'JetBrains Mono Variable', monospace",
    registryVariable: "--font-mono",
    previewVariable: "--font-jetbrains-mono",
    provider: "google",
    import: "JetBrains_Mono",
    dependency: "@fontsource-variable/jetbrains-mono",
    subsets: ["latin"],
  },
  {
    name: "geist-mono",
    title: "Geist Mono",
    type: "mono",
    family: "'Geist Mono Variable', monospace",
    registryVariable: "--font-mono",
    previewVariable: "--font-geist-mono",
    provider: "google",
    import: "Geist_Mono",
    dependency: "@fontsource-variable/geist-mono",
    subsets: ["latin"],
  },
  {
    name: "noto-serif",
    title: "Noto Serif",
    type: "serif",
    family: "'Noto Serif Variable', serif",
    registryVariable: "--font-serif",
    previewVariable: "--font-noto-serif",
    provider: "google",
    import: "Noto_Serif",
    dependency: "@fontsource-variable/noto-serif",
    subsets: ["latin"],
  },
  {
    name: "roboto-slab",
    title: "Roboto Slab",
    type: "serif",
    family: "'Roboto Slab Variable', serif",
    registryVariable: "--font-serif",
    previewVariable: "--font-roboto-slab",
    provider: "google",
    import: "Roboto_Slab",
    dependency: "@fontsource-variable/roboto-slab",
    subsets: ["latin"],
  },
  {
    name: "merriweather",
    title: "Merriweather",
    type: "serif",
    family: "'Merriweather Variable', serif",
    registryVariable: "--font-serif",
    previewVariable: "--font-merriweather",
    provider: "google",
    import: "Merriweather",
    dependency: "@fontsource-variable/merriweather",
    subsets: ["latin"],
  },
  {
    name: "lora",
    title: "Lora",
    type: "serif",
    family: "'Lora Variable', serif",
    registryVariable: "--font-serif",
    previewVariable: "--font-lora",
    provider: "google",
    import: "Lora",
    dependency: "@fontsource-variable/lora",
    subsets: ["latin"],
  },
  {
    name: "playfair-display",
    title: "Playfair Display",
    type: "serif",
    family: "'Playfair Display Variable', serif",
    registryVariable: "--font-serif",
    previewVariable: "--font-playfair-display",
    provider: "google",
    import: "Playfair_Display",
    dependency: "@fontsource-variable/playfair-display",
    subsets: ["latin"],
  },
  {
    name: "eb-garamond",
    title: "EB Garamond",
    type: "serif",
    family: "'EB Garamond Variable', serif",
    registryVariable: "--font-serif",
    previewVariable: "--font-eb-garamond",
    provider: "google",
    import: "EB_Garamond",
    dependency: "@fontsource-variable/eb-garamond",
    subsets: ["latin"],
  },
  {
    name: "instrument-serif",
    title: "Instrument Serif",
    type: "serif",
    family: "'Instrument Serif', serif",
    registryVariable: "--font-serif",
    previewVariable: "--font-instrument-serif",
    provider: "google",
    import: "Instrument_Serif",
    dependency: "@fontsource/instrument-serif",
    subsets: ["latin"],
    weight: ["400"],
  },
] as const satisfies readonly FontDefinition[]

export type FontName = (typeof FONT_DEFINITIONS)[number]["name"]
