import type { HeadConfig, TransformContext } from "vitepress"
import type { DocsPageData } from '../../theme/plugins/component'

function generateMeta(context: TransformContext, hostname: string) {
	const head: HeadConfig[] = []
	const { pageData }: { pageData: DocsPageData } = context

	const url = `${hostname}/${pageData.relativePath.replace(/((^|\/)index)?\.md$/, "$2")}`

	head.push(["link", { rel: "canonical", href: url }])
	head.push(["meta", { property: "og:url", content: url }])
	head.push(["meta", { name: "twitter:url", content: url }])
	head.push(["meta", { name: "twitter:card", content: "summary_large_image" }])

	if (pageData.frontmatter.theme) {
		head.push(["meta", { name: "theme-color", content: pageData.frontmatter.theme }])
	}
	if (pageData.frontmatter.type) {
		head.push(["meta", { property: "og:type", content: pageData.frontmatter.type }])
	}
	if (pageData.frontmatter.customMetaTitle) {
		head.push([
			"meta",
			{
				property: "og:title",
				content: pageData.frontmatter.customMetaTitle,
			},
		])
		head.push([
			"meta",
			{
				name: "twitter:title",
				content: pageData.frontmatter.customMetaTitle,
			},
		])
		head.push(["meta", { property: "og:site_name", content: "" }])
	} else {
		head.push(["meta", { property: "og:title", content: pageData.frontmatter.title }])
		head.push(["meta", { name: "twitter:title", content: pageData.frontmatter.title }])
	}
	if (pageData.frontmatter.description) {
		head.push([
			"meta",
			{
				property: "og:description",
				content: pageData.frontmatter.description,
			},
		])
		head.push([
			"meta",
			{
				name: "twitter:description",
				content: pageData.frontmatter.description,
			},
		])
	}
	if (pageData.frontmatter.image) {
		head.push([
			"meta",
			{
				property: "og:image",
				content: `${hostname}/${pageData.frontmatter.image.replace(/^\//, "")}`,
			},
		])
		head.push([
			"meta",
			{
				name: "twitter:image",
				content: `${hostname}/${pageData.frontmatter.image.replace(/^\//, "")}`,
			},
		])
	} else {
		const url = pageData.filePath.replace("index.md", "").replace(".md", "")
		const imageUrl = `${url}/__og_image__/og.png`.replace(/\/\//g, "/").replace(/^\//, "")

		head.push(["meta", { property: "og:image", content: `${hostname}/${imageUrl}` }])
		head.push(["meta", { property: "og:image:width", content: "1200" }])
		head.push(["meta", { property: "og:image:height", content: "628" }])
		head.push(["meta", { property: "og:image:type", content: "image/png" }])
		head.push(["meta", { property: "og:image:alt", content: pageData.frontmatter.title }])
		head.push(["meta", { name: "twitter:image", content: `${hostname}/${imageUrl}` }])
		head.push(["meta", { name: "twitter:image:width", content: "1200" }])
		head.push(["meta", { name: "twitter:image:height", content: "628" }])
		head.push(["meta", { name: "twitter:image:alt", content: pageData.frontmatter.title }])
	}
	if (pageData.frontmatter.tag) {
		head.push(["meta", { property: "article:tag", content: pageData.frontmatter.tag }])
	}
	if (pageData.frontmatter.date) {
		head.push([
			"meta",
			{
				property: "article:published_time",
				content: pageData.frontmatter.date,
			},
		])
	}
	if (pageData.lastUpdated && pageData.frontmatter.lastUpdated !== false) {
		head.push([
			"meta",
			{
				property: "article:modified_time",
				content: new Date(pageData.lastUpdated).toISOString(),
			},
		])
	}

	return head
}

export default generateMeta