using System.ComponentModel;

namespace Lada.Framework.DTO.Enums
{
    public enum UnitOfWeight
    {
        [Description("Gram")]
        Gram = 1,
        [Description("Kilogram")]
        Kilogram = 2,
        [Description("Tấn")]
        Ton = 3
    }

    public enum UnitOfDistance
    {
        [Description("Milimet")]
        Milimet = 1,
        [Description("Centimet")]
        Centimet = 2,
        [Description("Kilomet")]
        Kilomet = 3
    }

    /// <summary>
    /// Enum quy định hệ số chuyển đổi đơn vị từ client input sang database storage
    /// </summary>
    public enum UnitConversionFactor
    {
        /// <summary>
        /// Chuyển đổi từ Kilogram (client) sang Gram (database)
        /// Hệ số: 1000
        /// </summary>
        [Description("Kilogram to Gram")]
        KilogramToGram = 1000,

        /// <summary>
        /// Chuyển đổi từ Centimeter (client) sang Millimeter (database)
        /// Hệ số: 10
        /// </summary>
        [Description("Centimeter to Millimeter")]
        CentimeterToMillimeter = 10
    }

    /// <summary>
    /// Helper class để thực hiện chuyển đổi đơn vị
    /// </summary>
    public static class UnitConverter
    {
        /// <summary>
        /// Chuyển đổi trọng lượng từ kg sang gram
        /// </summary>
        /// <param name="weightInKg">Trọng lượng tính bằng kg</param>
        /// <returns>Trọng lượng tính bằng gram</returns>
        public static int ConvertWeightToGram(decimal weightInKg)
        {
            return (int)(weightInKg * (int)UnitConversionFactor.KilogramToGram);
        }

        /// <summary>
        /// Chuyển đổi trọng lượng từ gram sang kg
        /// </summary>
        /// <param name="weightInGram">Trọng lượng tính bằng gram</param>
        /// <returns>Trọng lượng tính bằng kg</returns>
        public static decimal ConvertWeightToKilogram(int weightInGram)
        {
            return (decimal)weightInGram / (int)UnitConversionFactor.KilogramToGram;
        }

        /// <summary>
        /// Chuyển đổi kích thước từ cm sang mm
        /// </summary>
        /// <param name="dimensionInCm">Kích thước tính bằng cm</param>
        /// <returns>Kích thước tính bằng mm</returns>
        public static int ConvertDimensionToMillimeter(int dimensionInCm)
        {
            return dimensionInCm * (int)UnitConversionFactor.CentimeterToMillimeter;
        }

        /// <summary>
        /// Chuyển đổi kích thước từ mm sang cm
        /// </summary>
        /// <param name="dimensionInMm">Kích thước tính bằng mm</param>
        /// <returns>Kích thước tính bằng cm</returns>
        public static int ConvertDimensionToCentimeter(int dimensionInMm)
        {
            return dimensionInMm / (int)UnitConversionFactor.CentimeterToMillimeter;
        }
    }
}
