/**
 * config.js
 *
 * @author Cator Vee  hi@catorv.com
 */
const fs = require('./fileSystem')

const { CONFIG_FILE_NAME, CONFIG_KEY } = require('../constants')

/**
 * 加载项目配置内容
 * @returns {Promise<*|{}>}
 */
async function load () {
    const configData = (await fs.readFile(CONFIG_FILE_NAME)).toString()
    const config = JSON.parse(configData)

    const info = JSON.parse((await fs.readFile('package.json')).toString())
    config.version = info.version

    return config
}

/**
 * 保持项目配置内容
 * @param config
 * @returns {Promise<void>}
 */
async function save (config) {
    config = config || {}
    delete config.version

    let configData = (await fs.readFile(CONFIG_FILE_NAME)).toString()
    const json = { ...JSON.parse(configData), ...config }
    configData = JSON.stringify(json, null, '  ')
    await fs.writeFile(CONFIG_FILE_NAME, configData)
}

/**
 * 初始化配置内容
 * @param name
 * @returns {Promise<void>}
 */
async function init (name) {
    const config = await load()
    await (save(config))
}

/**
 * 获取项目名称
 * @returns {Promise<*|{}>}
 */
async function getProjectName () {
    const configData = (await fs.readFile(CONFIG_FILE_NAME)).toString()
    const config = JSON.parse(configData)
    return config.name
}
module.exports = { init, load, save, getProjectName }
