import { ExternalLinkContent } from "@prismicio/types-internal/lib/content"
import type { Link } from "@prismicio/types-internal/lib/customtypes"
import dataset from "../../../dataset/weblinks.json"
import type { MockConfig } from "../../../MockConfig"
import { slug } from "../../../utils"
export type ExternalLinkConfig = MockConfig
export const ExternalLinkMock = {
generate(def: Link, config?: ExternalLinkConfig): ExternalLinkContent {
let value: ExternalLinkContent
if (config?.value) {
value = config.value
} else {
const url = getRandomUrl()
const text = def.config?.allowText ? slug() : undefined
const variant =
def.config?.variants?.[
Math.floor(Math.random() * def.config.variants.length)
]
value = {
__TYPE__: "ExternalLink",
url,
...(text && { text }),
...(variant && { variant }),
}
}
return ExternalLinkContent.encode(value)
},
}
function getRandomUrl(): string {
const webLinks = dataset as ReadonlyArray
const randomIndex = Math.floor(Math.random() * webLinks.length)
const url = webLinks[randomIndex]
if (!url) throw new Error("Something happened during web link generation.")
return url
}