using System.Text.Json.Serialization;

namespace Managing.Domain.Evm
{
    /// <summary>
    /// Gas fee data model
    /// </summary>
    public class GasFeeData
    {
        /// <summary>
        /// Estimated gas fee in Wei
        /// </summary>
        [JsonPropertyName("estimatedGasFeeWei")]
        public string? EstimatedGasFeeWei { get; set; }

        /// <summary>
        /// Estimated gas fee in ETH
        /// </summary>
        [JsonPropertyName("estimatedGasFeeEth")]
        public string? EstimatedGasFeeEth { get; set; }

        /// <summary>
        /// Estimated gas fee in USD
        /// </summary>
        [JsonPropertyName("estimatedGasFeeUsd")]
        public double? EstimatedGasFeeUsd { get; set; }

        /// <summary>
        /// ETH balance of the account
        /// </summary>
        [JsonPropertyName("ethBalance")]
        public string? EthBalance { get; set; }

        /// <summary>
        /// Current ETH price in USD
        /// </summary>
        [JsonPropertyName("ethPrice")]
        public double? EthPrice { get; set; }

        /// <summary>
        /// Whether the account has sufficient balance for gas fees
        /// </summary>
        [JsonPropertyName("hasSufficientBalance")]
        public bool? HasSufficientBalance { get; set; }

        /// <summary>
        /// Error message if insufficient balance
        /// </summary>
        [JsonPropertyName("errorMessage")]
        public string? ErrorMessage { get; set; }

        /// <summary>
        /// Maximum allowed gas fee in USD
        /// </summary>
        [JsonPropertyName("maxAllowedUsd")]
        public double? MaxAllowedUsd { get; set; }

        /// <summary>
        /// Gas price in Wei
        /// </summary>
        [JsonPropertyName("gasPrice")]
        public string? GasPrice { get; set; }

        /// <summary>
        /// Gas limit
        /// </summary>
        [JsonPropertyName("gasLimit")]
        public string? GasLimit { get; set; }
    }
}
