const pluginRss = require('@11ty/eleventy-plugin-rss')
const pluginPWA = require('eleventy-plugin-pwa')
const markdownIt = require('markdown-it')
const markdownItAnchor = require('markdown-it-anchor')

const filters = require('./eleventy/filters.js')
const transforms = require('./eleventy/transforms.js')

const workboxOptions = {
    cacheId: 'emergency-site',
    swDest: './dist/sw.js',
    globPatterns: ['**/*.html', 'static/scripts/offline.js'],
    globIgnores: ['admin/**/*', '404/**/*'],
    importScripts: ['/static/scripts/worker.js'],
    skipWaiting: false
}

require('dotenv').config()

module.exports = function(config) {
    // Plugins
    config.addPlugin(pluginRss)
    config.addPlugin(pluginPWA, workboxOptions)

    // Filters
    Object.keys(filters).forEach(filterName => {
        config.addFilter(filterName, filters[filterName])
    })

    // Transform
    Object.keys(transforms).forEach(transformName => {
        config.addTransform(transformName, transforms[transformName])
    })

    // Markdown
    const mdlib = markdownIt({
        html: true,
        breaks: true,
        linkify: true,
        typographer: true
    }).use(markdownItAnchor, {
        permalink: true,
        permalinkClass: 'anchor',
        permalinkSymbol: '#'
    })
    config.setLibrary('md', mdlib)

    // Layouts
    config.addLayoutAlias('base', 'base.njk')
    config.addLayoutAlias('post', 'post.njk')

    // Pass-through files
    config.addPassthroughCopy('admin')
    config.addPassthroughCopy('src/static')
    config.addPassthroughCopy('src/robots.txt')

    // Deep-Merge
    config.setDataDeepMerge(true)

    // Base Config
    return {
        dir: {
            input: 'src',
            output: 'dist',
            includes: 'includes',
            layouts: 'layouts',
            data: 'data'
        },
        templateFormats: ['njk', 'md'],
        htmlTemplateEngine: 'njk',
        markdownTemplateEngine: 'njk',
        passthroughFileCopy: true
    }
}