namespace Grand.Domain.Payments;

public class PaymentTransaction : BaseEntity
{
    /// <summary>
    ///     Gets or sets payment method system name
    /// </summary>
    public string PaymentMethodSystemName { get; set; }

    /// <summary>
    ///     Gets or sets transaction status
    /// </summary>
    public TransactionStatus TransactionStatus { get; set; }

    /// <summary>
    ///     Gets or sets store ident
    /// </summary>
    public string StoreId { get; set; }

    /// <summary>
    ///     Gets or sets order guid
    /// </summary>
    public Guid OrderGuid { get; set; }

    /// <summary>
    ///     Gets or sets order code
    /// </summary>
    public string OrderCode { get; set; }

    /// <summary>
    ///     Gets or sets customer ident
    /// </summary>
    public string CustomerId { get; set; }

    /// <summary>
    ///     Gets or sets customer email
    /// </summary>
    public string CustomerEmail { get; set; }

    /// <summary>
    ///     Gets or sets currency code
    /// </summary>
    public string CurrencyCode { get; set; }

    public double CurrencyRate { get; set; }

    /// <summary>
    ///     Gets or sets amount
    /// </summary>
    public double TransactionAmount { get; set; }

    public double PaidAmount { get; set; }

    /// <summary>
    ///     Gets or sets the refunded amount
    /// </summary>
    public double RefundedAmount { get; set; }

    /// <summary>
    ///     Gets or sets id transaction
    /// </summary>
    public string IPAddress { get; set; }

    /// <summary>
    ///     Gets or sets authorization transaction id
    /// </summary>
    public string AuthorizationTransactionId { get; set; }

    /// <summary>
    ///     Gets or sets authorization transaction code
    /// </summary>
    public string AuthorizationTransactionCode { get; set; }

    /// <summary>
    ///     Gets or sets authorization transaction result
    /// </summary>
    public string AuthorizationTransactionResult { get; set; }

    /// <summary>
    ///     Gets or sets capture transaction id
    /// </summary>
    public string CaptureTransactionId { get; set; }

    /// <summary>
    ///     Gets or sets capture transaction result
    /// </summary>
    public string CaptureTransactionResult { get; set; }

    /// <summary>
    ///     Gets or sets description
    /// </summary>
    public string Description { get; set; }

    /// <summary>
    ///     Gets or sets additional info
    /// </summary>
    public string AdditionalInfo { get; set; }

    /// <summary>
    ///     Gets or sets custom values
    /// </summary>
    public Dictionary<string, object> CustomValues { get; set; } = new();

    /// <summary>
    ///     gets or sets errors
    /// </summary>
    public IList<string> Errors { get; set; } = new List<string>();

    /// <summary>
    ///     Gets or sets
    /// </summary>
    public bool Temp { get; set; }
}