package com.wzj.soopin.transaction.domain.bo.easypay.trade.query.resp;

import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.util.List;

@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
public class AliQueryRespParamInfoVO {
    /**
     * 支付宝店铺编号 支付宝支付能力出现
     */
    private String alipayStoreId;
    /**
     * 买家的支付宝唯一用户号
     */
    private String buyerId;
    /**
     * 买方登录ID
     */
    private String buyerLogonId;
    /**
     * 费率活动标识
     */
    private String chargeFlags;
    /**
     * 支付货币类型 默认人民 币： CNY，网联微信&银联微信，必填；网联支付宝&银联支付宝，选填，币种
     */
    private String currency;
    private AliDiscountsInfoVO discountsInfo;
    /**
     * 交易额外信息 网联支付宝渠道出现 特殊场景下与支付宝约定返回。 json字符串
     */
    private String extInfos;
    private List<FundBillVO> fundBillList;
    private HbFqPayInfo hbFqPayInfo;
    /**
     * 行业特殊信息 支付宝能力出现（ 例如在医保卡 支付业务中， 向用户返回医疗信息）
     */
    private String industrySepcDetail;
    /**
     * 结算币种兑换标价币种汇率
     */
    private String settleTransRate;
    /**
     * 商户门店编号 支付宝支付能力出现
     */
    private String storeId;
    /**
     * 发生支付交易的商户门店名称
     */
    private String storeName;
    /**
     * 商户机具终端编号 银联支付宝支付能力出现
     */
    private String terminalId;
    /**
     * 标价币种兑换支付币种汇率
     */
    private String transPayRate;
    /**
     * 买家名称 银联支付宝支付能力出现
     */
    private String userName;
    /**
     * 买家用户类型
     */
    private String userType;

    @Data
    @AllArgsConstructor
    @NoArgsConstructor
    @Builder
    public static class AliDiscountsInfoVO {

        /**
         * 商家优惠金额
         */
        private Long mchtDiscountAmount;
        /**
         * 平台优惠金额
         */
        private Long platDiscountAmount;
        /**
         * 优惠信息
         */
        private List<AliDiscountsDetailVO> promotionDetail;
    }

    @Data
    @AllArgsConstructor
    @NoArgsConstructor
    @Builder
    public static class FundBillVO {
        /**
         * 该支付工具类型所使用的金额
         */
        private Long amount;
        /**
         * 银行卡支付时的银行代码
         */
        private String bankCode;
        /**
         * 交易使用的资金渠道
         */
        private String fundChannel;
        /**
         * 渠道所使用的资金类型
         */
        private String fundType;
        /**
         * 渠道实际付款金额
         */
        private Long realAmount;
    }

    @Data
    @AllArgsConstructor
    @NoArgsConstructor
    @Builder
    public static class HbFqPayInfo {
        /**
         * 分期金额
         */
        private Long fqAmount;
        /**
         * 花呗分期数
         */
        private Long hbFqNum;
    }

    @Data
    @AllArgsConstructor
    @NoArgsConstructor
    @Builder
    public static class AliDiscountsDetailVO {
        /**
         * 活动ID
         */
        private String activityId;
        /**
         * 优惠券面额
         */
        private Long amount;
        /**
         * 优惠券备注信息
         */
        private String memo;
        /**
         * 商户出资
         */
        private Long merchantContribute;
        /**
         * 优惠名称
         */
        private String name;
        /**
         * 其他出资方出资金额
         */
        private Long otherContribute;
        /**
         * 其他出资
         */
        private List<OtherContribute> otherContributeDetails;
        /**
         * 券ID
         */
        private String promotionId;
        /**
         * 如果使用的这张券是用户购买的，则该字段代表用户在购买这张券时平台优惠的金额
         */
        private Long purchaseAntContribute;
        /**
         * 如果使用的这张券是用户购买的，则该字段代表用户在购买这张券时用户实际付款的金额
         */
        private Long purchaseBuyerContribute;
        /**
         * 如果使用的这张券是用户购买的，则该字段代表用户在购买这张券时商户优惠的金额
         */
        private Long purchaseMerchanCcontribute;
        /**
         * 优惠类型
         */
        private String type;
    }

    @Data
    @AllArgsConstructor
    @NoArgsConstructor
    @Builder
    public static class OtherContribute {
        /**
         * 出资金额
         */
        private Long contributeAmount;
        /**
         * 出资类型
         */
        private String contributeType;
    }
}
