import { mergeOptions } from '../utils/mergeOptions'

const defaultOption = {
  fileName: 'dataSource.json',
  path: './src/lowcodeConfig'
}

function genDataSourcePlugin(options = {}) {
  const realOptions = mergeOptions(defaultOption, options)

  const { path, fileName } = realOptions

  return {
    name: 'tinyEngine-generateCode-plugin-dataSource',
    description: 'transform schema to dataSource plugin',
    /**
     * 转换 dataSource
     * @param {import('@opentiny/tiny-engine-dsl-vue').IAppSchema} schema
     * @returns
     */
    run(schema) {
      const dataSource = schema?.dataSource || {}

      const { dataHandler, errorHandler, willFetch, list } = dataSource || {}

      const data = {
        list: list.map(({ id, name, data }) => ({ id, name, ...data }))
      }

      if (dataHandler) {
        data.dataHandler = dataHandler
      }

      if (errorHandler) {
        data.errorHandler = errorHandler
      }

      if (willFetch) {
        data.willFetch = willFetch
      }

      return {
        fileType: 'json',
        fileName,
        path,
        fileContent: JSON.stringify(data)
      }
    }
  }
}

export default genDataSourcePlugin