/**
 * 如果是一个 仅 提供 functions 支持的插件，
 * 基本上可以照搬本文件进行插件声明
 * 然后在此基础上进行修改
 */

// 通过引入 'vuepress-plugin-netlify-functions' 插件，来为本插件提供
// netlify functions 开发时支持
import type { App, Plugin } from '@vuepress/core'
import { getDirname, path } from '@vuepress/utils'
import { useNetlifyFunctionsPlugin } from 'vuepress-plugin-netlify-functions'
import type { PageCollectionOptions } from '../shared/index.js'

const __dirname = getDirname(import.meta.url)

export function pageCollectionPlugin(_options: PageCollectionOptions = {}): Plugin {
  return (app: App) => {
    const {
      // 客户端发起 functions 请求时的代理前缀
      // 默认是 /api
      // /api/* 的请求实际被转发到了 netlify functions 服务器的 /.netlify/functions/*
      proxyPrefix,
      // 在开发环境中，需要将 自定义到 functions 文件，注入到 netlify functions 服务中
      // 这样才能够被请求到
      preparePluginFunctions,
      // vuepress 构建生产包时，打包这些 functions文件到 vuepress dest中。
      generatePluginFunctions,
    } = useNetlifyFunctionsPlugin(app, {
      // 一般来说， 都是设置为 path.join(__dirname, 'functions')
      // 即是当前文件同级的 functions 目录
      // 这个目录的文件都会被监听，然后注入到 netlify functions 服务中
      directory: path.join(__dirname, 'functions'),
    })
    return {
      name: '@vuepress-plume/plugin-page-collection',
      define: () => ({
        // 将 proxyPrefix 注入到 客户端中
        // 以便获取使用
        __COLLECTION_PROXY_PREFIX__: proxyPrefix,
      }),
      clientConfigFile: path.resolve(__dirname, '../client/clientConfig.js'),
      // 不要忘了，需要在这里 定义好 钩子
      onPrepared: () => preparePluginFunctions(),
      onGenerated: () => generatePluginFunctions(),
    }
  }
}
