package com.sonic.lion.domain.input;

import com.sonic.lion.enums.BizType;
import com.sonic.lion.enums.PayChannel;
import com.sonic.lion.enums.PaymentType;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.time.LocalDateTime;

/**
 * @author: code
 * @date: 2025/05/18
 * @Description:
 * @version: 1.0.0
 */
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class PrePaymentInput {

    /**
     * 平台代码
     */
    private String platform;

    /**
     * 外部交易号(如订单号)
     */
    private String outTradeNo;

    /**
     * 外部交易号关联单号（如：打赏单号关联的游戏订单的订单号）
     */
    private String outTradeNoRelationNo;

    /**
     * 业务类型
     */
    private BizType bizType;

    /**
     * 交易标题或名称
     */
    private String name;

    /**
     * 本方(发起方)账户(account .id)
     */
    private Long srcAccountId;

    /**
     * 收款方账号编号
     */
    private String desAccountNo;

    /**
     * 收款方账号类型：参看DesAccountType
     */
    private Integer desAccountType;

    /**
     * 用户实得金额
     */
    private Long actualAmount;

    /**
     * 商品金额,单位:分
     */
    private Long productAmount;

    /**
     * 优惠金额,单位:分
     */
    private Long promoAmount;

    /**
     * 备注
     */
    private String remark;

    private String srcAccountName;

    private String desAccountName;

    /**
     * 支付渠道
     */
    private PayChannel payChannel;

    /**
     * 实付金额
     */
    private Long occurAmount;

    /**
     * 手续费
     */
    private Long fee;

    /**
     *  平台费用 10%
     */
    private Long platformFee;

    /**
     * 三方费用
     */
    private Long thirdFee;

    /**
     * 付款方式
     */
    private PaymentType paymentType;

    /**
     * 充值并支付时，充值后付款的交易号
     */
    private String paymentTradeNo;

    /**
     * 关闭交易时间
     */
    private LocalDateTime closeTime;

    /**
     * 资源key
     */
    private String resourceKey;

    /**
     * 资源数量
     */
    private Integer resourceNum;

    /**
     * 扩展信息
     */
    private String extend;

    private String ip;

    private String productId;

    private String  clientVersion;
}
