package com.bizzan.bitrade.entity;

import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import org.hibernate.annotations.CreationTimestamp;

import javax.persistence.*;
import java.math.BigDecimal;
import java.util.Date;

/**
 * 空投分配记录，管理员预分配给指定用户的空投奖励，用户满足条件后可自行领取
 *
 * @author auto
 * @date 2026-05-17
 */
@Entity
@Data
@Table(name = "airdrop_record")
public class AirdropRecord {

    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Id
    private Long id;

    /** 用户ID */
    @Column(nullable = false, columnDefinition = "bigint comment '用户ID'")
    private Long memberId;

    /** 关联质押订单ID */
    @Column(columnDefinition = "bigint comment '关联质押订单ID'")
    private Long stakingOrderId;

    /** 空投币种 */
    @Column(length = 50, columnDefinition = "varchar(50) comment '空投币种'")
    private String coinUnit;

    /** 分配金额 */
    @Column(columnDefinition = "decimal(26,8) default 0 comment '分配金额'")
    private BigDecimal amount = BigDecimal.ZERO;

    /**
     * 领取/审核状态
     * 0=待领取（管理员已分配，用户未提交）
     * 1=已发放（审核通过，已入账）
     * 2=审核中（用户已提交，等待管理员审核）
     * 3=已拒绝（管理员拒绝）
     */
    @Column(columnDefinition = "int default 0 comment '状态：0待领取 1已发放 2审核中 3已拒绝'")
    private Integer status = 0;

    /** 领取时间，用户提交审核时写入 */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    @Column(columnDefinition = "datetime comment '用户提交审核时间'")
    private Date claimTime;

    /** 审核时间，管理员通过或拒绝时写入 */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    @Column(columnDefinition = "datetime comment '管理员审核时间'")
    private Date auditTime;

    /** 审核备注，拒绝时填写拒绝理由 */
    @Column(length = 500, columnDefinition = "varchar(500) comment '审核备注/拒绝理由'")
    private String auditRemark;

    /** 创建时间（管理员分配时间） */
    @CreationTimestamp
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    private Date createTime;
}
