package org.jcnc.jnotepad.controller.config;

import org.jcnc.jnotepad.api.core.controller.config.BaseConfigController;
import org.jcnc.jnotepad.app.config.AppConfig;

import java.nio.file.Paths;

import static org.jcnc.jnotepad.app.common.constants.AppConstants.DEFAULT_PROPERTY;
import static org.jcnc.jnotepad.app.common.constants.AppConstants.PROGRAM_FILE_DIRECTORY;

/**
 * 应用程序配置文件控制器
 *
 * @author gewuyou
 */
public class AppConfigController extends BaseConfigController<AppConfig> {

    /**
     * 配置文件名
     */
    public static final String CONFIG_NAME = "JNotepadConfig.json";
    private static final AppConfigController INSTANCE = new AppConfigController();
    private final String configDir;

    public AppConfigController() {
        configDir = Paths.get(System.getProperty(DEFAULT_PROPERTY), PROGRAM_FILE_DIRECTORY, SYSTEM_CONFIG_DIR).toString();
        loadConfig();
    }

    public static AppConfigController getInstance() {
        return INSTANCE;
    }

    /**
     * 获取配置文件Class类
     *
     * @return 配置文件Class类
     */
    @Override
    protected Class<AppConfig> getConfigClass() {
        return AppConfig.class;
    }


    /**
     * 获取配置文件名称
     *
     * @return 配置文件名称
     */
    @Override
    protected String getConfigName() {
        return CONFIG_NAME;
    }

    /**
     * 获取配置文件文件夹路径
     *
     * @return 配置文件夹路径
     */
    @Override
    protected String getConfigDir() {
        return configDir;
    }

    /**
     * 创建配置文件实体
     *
     * @return 默认的配置文件实体
     * @apiNote 返回默认的配置文件实体用于序列化json
     */
    @Override
    public AppConfig generateDefaultConfig() {
        AppConfig config = new AppConfig();
        config.setRootPath(System.getProperty(DEFAULT_PROPERTY));
        return config;
    }
}
