import {
	Fira_Code,
	Fira_Sans,
	Geist,
	IBM_Plex_Mono,
	Inter,
	JetBrains_Mono,
	Reddit_Sans,
	Roboto,
	Ubuntu,
} from "next/font/google";
import localFont from "next/font/local";

const ai_sans = localFont({
	src: [
		{
			path: "./AISans-Regular.woff2",
			weight: "400",
			style: "normal",
		},
		{
			path: "./AISans-Semibold.woff2",
			weight: "700",
			style: "normal",
		},
	],
	display: "swap",
	variable: "--font-ai-sans",
});

const anthropic_sans = localFont({
	src: "./anthropicSans.woff2",
	display: "swap",
	variable: "--font-anthropic-sans",
});

const sf_pro_display = localFont({
	src: [
		{
			path: "./SF-Pro-Display-Regular.otf",
			weight: "400",
			style: "normal",
		},
		{
			path: "./SF-Pro-Display-Medium.otf",
			weight: "500",
			style: "normal",
		},
		{
			path: "./SF-Pro-Display-Semibold.otf",
			weight: "600",
			style: "normal",
		},
		{
			path: "./SF-Pro-Display-Bold.otf",
			weight: "700",
			style: "normal",
		},
	],
	display: "swap",
	variable: "--font-sf-pro-display",
});

const sf_pro_rounded = localFont({
	src: [
		{
			path: "./SF-Pro-Rounded-Regular.otf",
			weight: "400",
			style: "normal",
		},
		{
			path: "./SF-Pro-Rounded-Medium.otf",
			weight: "500",
			style: "normal",
		},
		{
			path: "./SF-Pro-Rounded-Semibold.otf",
			weight: "600",
			style: "normal",
		},
		{
			path: "./SF-Pro-Rounded-Bold.otf",
			weight: "700",
			style: "normal",
		},
	],
	display: "swap",
	variable: "--font-sf-pro-rounded",
});

const inter = Inter({
	subsets: ["latin"],
	display: "swap",
	variable: "--font-inter",
});

const geist_sans = Geist({
	subsets: ["latin"],
	display: "swap",
	variable: "--font-geist",
});

const roboto = Roboto({
	subsets: ["latin"],
	display: "swap",
	variable: "--font-roboto",
});

const reddit_sans = Reddit_Sans({
	subsets: ["latin"],
	display: "swap",
	variable: "--font-reddit-sans",
});

const fira_sans = Fira_Sans({
	weight: ["400", "500", "600", "700"],
	subsets: ["latin"],
	display: "swap",
	variable: "--font-fira-sans",
});

const ubuntu = Ubuntu({
	weight: ["400"],
	subsets: ["latin"],
	display: "swap",
	variable: "--font-ubuntu",
});

const jetbrains_mono = JetBrains_Mono({
	subsets: ["latin"],
	display: "swap",
	variable: "--font-jetbrains-mono",
});

const fira_code = Fira_Code({
	subsets: ["latin"],
	display: "swap",
	variable: "--font-fira-code",
});

const ibm_plex_mono = IBM_Plex_Mono({
	weight: ["400", "500", "600"],
	subsets: ["latin"],
	display: "swap",
	variable: "--font-ibm-plex-mono",
});

export type FontOption = {
	key: string;
	label: string;
	variable: string;
};

export const FONT_OPTIONS: FontOption[] = [
	{ key: "ai-sans", label: "AI Sans", variable: "var(--font-ai-sans)" },
	{
		key: "anthropic-sans",
		label: "Anthropic Sans",
		variable: "var(--font-anthropic-sans)",
	},
	{ key: "fira-code", label: "Fira Code", variable: "var(--font-fira-code)" },
	{
		key: "fira-sans",
		label: "Fira Sans",
		variable: "var(--font-fira-sans)",
	},
	{ key: "geist", label: "Geist Sans", variable: "var(--font-geist)" },
	{
		key: "ibm-plex-mono",
		label: "IBM Plex Mono",
		variable: "var(--font-ibm-plex-mono)",
	},
	{ key: "inter", label: "Inter", variable: "var(--font-inter)" },
	{
		key: "jetbrains-mono",
		label: "JetBrains Mono",
		variable: "var(--font-jetbrains-mono)",
	},
	{
		key: "reddit-sans",
		label: "Reddit Sans",
		variable: "var(--font-reddit-sans)",
	},
	{ key: "roboto", label: "Roboto", variable: "var(--font-roboto)" },
	{
		key: "sf-pro-display",
		label: "SF Pro Display",
		variable: "var(--font-sf-pro-display)",
	},
	{
		key: "sf-pro-rounded",
		label: "SF Pro Rounded",
		variable: "var(--font-sf-pro-rounded)",
	},
	{ key: "ubuntu", label: "Ubuntu", variable: "var(--font-ubuntu)" },
];

/** @deprecated Use FONT_OPTIONS */
export const SYSTEM_FONT_OPTIONS = FONT_OPTIONS;
/** @deprecated Use FONT_OPTIONS */
export const MONEY_FONT_OPTIONS = FONT_OPTIONS;

const allFonts = [
	ai_sans,
	anthropic_sans,
	sf_pro_display,
	sf_pro_rounded,
	inter,
	geist_sans,
	roboto,
	reddit_sans,
	fira_sans,
	ubuntu,
	jetbrains_mono,
	fira_code,
	ibm_plex_mono,
];

export const allFontVariables = allFonts.map((f) => f.variable).join(" ");

// Backward compatibility
export const main_font = ai_sans;
export const money_font = ai_sans;

export function getFontVariable(key: string): string {
	const option = FONT_OPTIONS.find((o) => o.key === key);
	return option?.variable ?? "var(--font-ai-sans)";
}
