using System.Xml.Serialization;

namespace Hncore.Pass.PaymentCenter.WeiFuTong.Refund
{
    /// <summary>
    /// 威富通退款请求
    /// </summary>
    public class WeiFuTongRefundRequest : WeiFuTongRequestBase
    {
        /// <summary>
        /// 商户系统内部的订单号, out_trade_no和transaction_id至少一个必填，同时存在时transaction_id优先
        /// </summary>
        [XmlElement("out_trade_no")]
        public string OutTradeNo { get; set; }

        /// <summary>
        /// 可传入平台订单号或第三方商户单号（third_order_no）, out_trade_no和transaction_id至少一个必填，同时存在时transaction_id优先
        /// </summary>
        [XmlElement("transaction_id")]
        public string TransactionId { get; set; }
        
        /// <summary>
        /// 商户退款单号，32个字符内、可包含字母,确保在商户系统唯一。同个退款单号多次请求，平台当一个单处理，只会退一次款。如果出现退款不成功，请采用原退款单号重新发起，避免出现重复退款。
        /// </summary>
        [XmlElement("out_refund_no")]
        public string OutRefundNo { get; set; }
        
        /// <summary>
        /// 订单总金额，单位为分
        /// </summary>
        [XmlElement("total_fee")]
        public int OrderTotalFee { get; set; }
        
        /// <summary>
        /// 退款总金额,单位为分,可以做部分退款
        /// </summary>
        [XmlElement("refund_fee")]
        public int RefundFee { get; set; }

        /// <summary>
        /// 操作员帐号,默认为商户号
        /// </summary>
        [XmlElement("op_user_id")]
        public string OpUserId => MchId;

        /// <summary>
        /// 退款渠道ORIGINAL-原路退款，默认
        /// </summary>
        [XmlElement("refund_channel")]
        public string RefundChannel => "ORIGINAL";
        
        public WeiFuTongRefundRequest() : base("unified.trade.refund")
        {
        }
    }
}