namespace Sunfish.Config;

/// <summary>Donde se busca y donde se crea sunfish.conf.</summary>
public static class ConfigLocator
{
    public const string FileName = "sunfish.conf";

    /// <summary>Junto al ejecutable: modo portable.</summary>
    public static string PortablePath => Path.Combine(AppContext.BaseDirectory, FileName);

    /// <summary>Carpeta de configuracion del usuario segun el sistema.</summary>
    public static string UserPath
    {
        get
        {
            string baseDir;
            if (OperatingSystem.IsWindows())
                baseDir = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "Sunfish");
            else if (OperatingSystem.IsMacOS())
                baseDir = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.UserProfile), "Library", "Application Support", "Sunfish");
            else
            {
                string? xdg = Environment.GetEnvironmentVariable("XDG_CONFIG_HOME");
                if (string.IsNullOrWhiteSpace(xdg))
                    xdg = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.UserProfile), ".config");
                baseDir = Path.Combine(xdg, "sunfish");
            }
            return Path.Combine(baseDir, FileName);
        }
    }

    /// <summary>El fichero indicado, el portable o el del usuario: el primero que exista; null si ninguno.</summary>
    public static string? Find(string? explicitPath = null)
    {
        if (!string.IsNullOrEmpty(explicitPath))
            return explicitPath;
        if (File.Exists(PortablePath))
            return PortablePath;
        if (File.Exists(UserPath))
            return UserPath;
        return null;
    }
}
