import { defineConfig } from "astro/config";

import react from "@astrojs/react";
import sitemap from "@astrojs/sitemap";
import icon from "astro-icon";

import { rehypeHeadingIds } from "@astrojs/markdown-remark";
import remarkCallout from "@r4ai/remark-callout";
import expressiveCode from "astro-expressive-code";
import rehypeDocument from "rehype-document";
import rehypeExternalLinks from "rehype-external-links";
import rehypeKatex from "rehype-katex";
import rehypePrettyCode from "rehype-pretty-code";
import remarkEmoji from "remark-emoji";
import remarkMath from "remark-math";
import remarkSectionize from "remark-sectionize";

import { pluginCollapsibleSections } from "@expressive-code/plugin-collapsible-sections";
import { pluginLineNumbers } from "@expressive-code/plugin-line-numbers";

import tailwindcss from "@tailwindcss/vite";

export default defineConfig({
	site: "https://blog.z0x.ca",
	integrations: [
		expressiveCode({
			themes: ["github-light", "github-dark"],
			plugins: [pluginCollapsibleSections(), pluginLineNumbers()],
			useDarkModeMediaQuery: false,
			themeCssSelector: (theme) => `[data-theme="${theme.name.split("-")[1]}"]`,
			defaultProps: {
				wrap: true,
				collapseStyle: "collapsible-auto",
				overridesByLang: {
					"ansi,bat,bash,batch,cmd,console,powershell,ps,ps1,psd1,psm1,sh,shell,shellscript,shellsession,text,zsh":
						{
							showLineNumbers: false,
						},
				},
			},
			styleOverrides: {
				codeFontSize: "0.75rem",
				borderColor: "var(--border)",
				codeFontFamily: "var(--font-mono)",
				codeBackground:
					"color-mix(in oklab, var(--secondary) 25%, transparent)",
				frames: {
					editorActiveTabForeground: "var(--muted-foreground)",
					editorActiveTabBackground:
						"color-mix(in oklab, var(--secondary) 25%, transparent)",
					editorActiveTabIndicatorBottomColor: "transparent",
					editorActiveTabIndicatorTopColor: "transparent",
					editorTabBorderRadius: "0",
					editorTabBarBackground: "transparent",
					editorTabBarBorderBottomColor: "transparent",
					frameBoxShadowCssValue: "none",
					terminalBackground:
						"color-mix(in oklab, var(--secondary) 25%, transparent)",
					terminalTitlebarBackground: "transparent",
					terminalTitlebarBorderBottomColor: "transparent",
					terminalTitlebarForeground: "var(--muted-foreground)",
				},
				lineNumbers: {
					foreground: "var(--muted-foreground)",
				},
				uiFontFamily: "var(--font-sans)",
			},
		}),
		react(),
		sitemap(),
		icon(),
	],
	vite: {
		plugins: [tailwindcss()],
	},
	server: {
		host: true,
	},
	devToolbar: {
		enabled: false,
	},
	markdown: {
		syntaxHighlight: false,
		rehypePlugins: [
			[
				rehypeDocument,
				{
					css: "https://cdn.jsdelivr.net/npm/katex@0.16.21/dist/katex.min.css",
				},
			],
			[
				rehypeExternalLinks,
				{
					target: "_blank",
					rel: ["nofollow", "noreferrer", "noopener"],
				},
			],
			rehypeHeadingIds,
			rehypeKatex,
			[
				rehypePrettyCode,
				{
					theme: {
						light: "github-light",
						dark: "github-dark",
					},
				},
			],
		],
		remarkPlugins: [remarkMath, remarkEmoji, remarkSectionize, remarkCallout],
	},
});