namespace adas_core.Domain.Utils;

public static class DictionaryEx
{
    public static TV? GetValue<TK, TV>(this IDictionary<TK, TV> dict, TK key, TV? defaultValue = default)
    {
        return dict.TryGetValue(key, out var value) ? value : defaultValue;
    }

    public static string ToListString<TK, TV>(this IDictionary<TK, TV> dict, string itemSeparator = ", ",
        string keySeparator = ": ")
    {
        var s = dict.Keys.Select(key => key + keySeparator + dict[key]).ToList();

        return string.Join(itemSeparator, s);
    }

    public static TValue? TryGetAndReturn<TKey, TValue>(this IDictionary<TKey, TValue> dictionary, TKey key)
        where TKey : notnull where TValue : class
    {
        if (!dictionary.TryGetValue(key, out var retValue)) retValue = null;
        return retValue;
    }
}