package com.kym.entity.miniapp.vo;

import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import lombok.experimental.Accessors;

import java.time.LocalDateTime;

/**
 * @author skyline
 * @description 退款
 * @date 2023-09-14 16:27
 */
@Data
@Accessors(chain = true)
public class RefundVo {

    /**
     * id
     */
    private Long refundLogId;

    /**
     * 用户ID
     */
    private Long userId;

    /**
     * 手机号
     */
    private String mobilePhone;

    /**
     * 余额
     */
    private int balance;

    /**
     * 冻结金额
     */
    private int frozenAmount;

    /**
     * 商户退款单号
     */
    private String outRefundNo;

    /**
     * 商户订单号
     */
    private String outTradeNo;

    /**
     * 退款渠道
     */
    private String channel;

    /**
     * 退款入账账户
     */
    private String userReceivedAccount;

    /**
     * 退款成功时间
     */
    @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    private LocalDateTime successTime;

    /**
     * 退款申请时间
     */
    @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    private LocalDateTime createTime;

    /**
     * 退款状态：SUCCESS：退款成功 CLOSED：退款关闭 PROCESSING：退款处理中 ABNORMAL：退款异常
     */
    private String status;

    /**
     * 订单金额
     */
    private Integer total;

    /**
     * 退款金额
     */
    private Integer refund;

    /**
     * 不可退金额（分）
     */
    private Integer discountAmount;

    /**
     * 用户支付币种
     */
    private String currency;

    /**
     * 退款原因
     */
    private String reason;

    /**
     * 退款人
     */
    private String adminUsername;

    /**
     * 支付成功时间
     */
    @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    private LocalDateTime paySuccessTime;

    /**
     * 是否超过退款时限（365天）
     */
    private Boolean isOverdue;

    /**
     * 充值时间（来自t_pay_log的success_time）
     */
    @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    private LocalDateTime rechargeTime;

    // 添加 getter/setter 方法以确保正确映射
    public Boolean getIsOverdue() {
        return isOverdue;
    }

    public void setIsOverdue(Boolean isOverdue) {
        this.isOverdue = isOverdue;
    }

    // 为了处理 MySQL 返回的整数类型，添加一个辅助方法
    public void setIsOverdueFromInt(Integer value) {
        this.isOverdue = (value != null && value == 1);
    }

}
