package com.hljunlp.laozhongyi;

import java.io.File;
import java.io.IOException;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import java.util.Set;

import org.apache.commons.io.FileUtils;
import org.apache.commons.io.FilenameUtils;
import org.apache.commons.lang3.StringUtils;
import org.joda.time.LocalDateTime;

import com.google.common.collect.Lists;

public class GeneratedFileManager {
    private static String mLogDirPath;
    private static String mHyperParameterConfigDirPath;

    public static void mkdirForHyperParameterConfig() {
        final String homeDir = System.getProperty("user.home");
        final String logDir = "hyper" + new LocalDateTime().toString();
        mHyperParameterConfigDirPath = FilenameUtils.concat(homeDir, logDir);
        try {
            FileUtils.forceMkdir(new File(mHyperParameterConfigDirPath));
        } catch (final IOException e) {
            throw new IllegalStateException(e);
        }
    }

    public static void mkdirForLog() {
        final String homeDir = System.getProperty("user.home");
        final String logDir = "log" + new LocalDateTime().toString();
        mLogDirPath = FilenameUtils.concat(homeDir, logDir);
        try {
            FileUtils.forceMkdir(new File(mLogDirPath));
        } catch (final IOException e) {
            throw new IllegalStateException(e);
        }
    }

    public static String getHyperParameterConfigFileFullPath(final Map<String, String> config,
            final Set<String> multiValuesKeys) {
        final List<String> keys = Lists.newArrayList();
        for (final String key : config.keySet()) {
            if (multiValuesKeys.contains(key)) {
                keys.add(key);
            }
        }
        Collections.sort(keys);

        String fileName = StringUtils.EMPTY;
        for (final String key : keys) {
            fileName += key + config.get(key).replace("/", "-");
        }

        return FilenameUtils.concat(mHyperParameterConfigDirPath, fileName);
    }

    public static String getLogFileFullPath(final Map<String, String> config,
            final Set<String> multiValuesKeys) {
        final List<String> keys = Lists.newArrayList();
        for (final String key : config.keySet()) {
            if (multiValuesKeys.contains(key)) {
                keys.add(key);
            }
        }
        Collections.sort(keys);

        String fileName = StringUtils.EMPTY;
        for (final String key : keys) {
            fileName += key + config.get(key).replace("/", "-");
        }

        return FilenameUtils.concat(mLogDirPath, fileName);
    }
}