package web.multitask.trismegistoservices.utils;

import java.io.File;
import java.util.HashMap;
import java.util.Locale;
import java.util.Map;

public class DotEnvUtil {

    static String detectedOS;

    public enum OSType {
        Windows, MacOS, Linux, Other
    };

    public static String getOperatingSystemType() {
        return detectedOS != null ? detectedOS :
                (detectedOS = getOSFromSystemProperty());
    }

    private static String getOSFromSystemProperty() {
        String OS = System.getProperty("os.name", "generic").toLowerCase(Locale.ENGLISH);
        if (OS.contains("mac") || OS.contains("darwin")) return "MacOS";
        if (OS.contains("win")) return "Windows";
        if (OS.contains("nux")) return "Linux";
        return "Other";
    }

    private static final Map<String, String> OS_PATH_MAP = new HashMap<>();
    
    static {
        OS_PATH_MAP.put("MacOS", "/opt/dotenv/");
        OS_PATH_MAP.put("Linux", "/opt/dotenv/");
        OS_PATH_MAP.put("Windows", "abcdefghijklmnopqrstuvwxyz");
    }

    public static String getDotEnvPath(String projectName) {
        String detectedOs = DotEnvUtil.getOperatingSystemType();

        return OS_PATH_MAP.getOrDefault(detectedOs, "")
            + (detectedOs.equals("Windows")
                ? getWindowsPath(projectName)
                : projectName);
    }

    private static String getWindowsPath(String projectName) {
        return OS_PATH_MAP.get("Windows")
            .chars()
            .mapToObj(letter -> "/" + (char) letter + ":/dotenv/" + projectName)
            .filter(path -> new File(path).exists())
            .findFirst()
            .orElse("");
    }

}