package net.northking.cctp.element.system;

import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.SystemUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.io.File;

/**
 * 可以通过该类获取执行机引擎预设的文件存储基础目录
 *
 * @author fengxiang.zhang
 * @since 1.0
 */
public class FileStorage {

    private static Logger logger = LoggerFactory.getLogger(FileStorage.class);

    /**
     * 组件库存储文件基础目录
     */
    public static final String BASE_STORAGE_DIR = getBaseStorageDir();

    private static String getBaseStorageDir() {
        String root = getSystemStorageRoot();
        if (root == null) {
            root = SystemUtils.getUserHome().getPath();
        }
        root = StringUtils.removeEnd(root, File.separator);
        logger.info("当前系统组件库使用的存储基础路径:{}", root);
        return root;
    }

    /**
     * System.setProperty
     * BASE_STORAGE_DIR_KEY
     *
     * @return
     */
    private static String getSystemStorageRoot() {
        String baseDir = System.getProperty(SystemProperties.BASE_STORAGE_DIR_KEY);
        if (StringUtils.isNotBlank(baseDir)) {
            File file = new File(baseDir);
            if (!file.exists()) {
                file.mkdirs();
                return file.getPath();
            }
            if (file.isDirectory()) {
                return file.getPath();
            } else {
                logger.warn("系统预设组件库使用的存储基础路径:{} 不是一个目录.", baseDir);
            }
        }
        logger.warn("系统预设属性-> [{}={}] 无效.", SystemProperties.BASE_STORAGE_DIR_KEY, baseDir);
        return null;
    }

}