//
// Copyright (c) 2022-present, Trail of Bits, Inc.
// All rights reserved.
//
// This source code is licensed in accordance with the terms specified in
// the LICENSE file found in the root directory of this source tree.
//
using System;


namespace RpcInvestigator.Util
{
    internal static class Formatting
    {
        static readonly string[] SizeSuffixes = { "B", "KB", "MB", "GB" };

        public static string InfoUnit(dynamic Value, int DecimalPlaces = 2)
        {
            if (!decimal.TryParse(Value.ToString(), out decimal value))
            {
                return "NaN!";
            }

            if (value > int.MaxValue)
            {
                return "NaN!";
            }
            else if (value < 0)
            {
                return "-" + InfoUnit(-value, DecimalPlaces);
            }

            int i = 0;
            while (Math.Round(value, DecimalPlaces) >= 1000)
            {
                value /= 1024;
                i++;
            }

            return string.Format("{0:n" + DecimalPlaces + "} {1}", value, SizeSuffixes[i]);
        }
    }
}
