import fs from 'fs'
import njk from 'nunjucks'
import { generateContext } from './generateContext.js'

// Load in config
const ConfigFile = fs.readFileSync('./config.json')
const Config = JSON.parse(ConfigFile)

export function njkRenderer(path) {
    // Read in the template
    const njkFile = fs.readFileSync(path).toString()
    // Pre-render it for analysis while rendering context
    const prerenderedNjk = njk.renderString(njkFile)

    // Generate proper context and make a final render of the template.
    const context = generateContext(prerenderedNjk)
    return njk.renderString(njkFile, context)
}

export function mdRenderer(path) {
    // Load in the njk template and markdown
    const njkFile = fs.readFileSync(`${Config.contentDir}/templates/external_md.njk`).toString()
    const externalMarkdownFile = fs.readFileSync(path).toString()

    // Separate the actual markdown from potential 'externalContext'
    const externalMarkdown = externalMarkdownFile.replace(/^%%-\n[\S\s]*-%%\n/, "").replace(/```\w*[\s\S]*?```/g, match => match.replace(/ /g, "•"))
    const externalContext = externalMarkdownFile.match(/^%%-\n[\S\s]*-%%\n/)

    // Pre-render the template for analysis during context generation.
    const prerenderedNjk = njk.renderString(njkFile, { externalMarkdown })

    // Generate the context and add the externalMarkdown to the context, then render the template.
    let context = generateContext(prerenderedNjk, externalContext)
    context.externalMarkdown = externalMarkdown
    return njk.renderString(njkFile, context)
}