package com.bizzan.bitrade.entity;

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

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

/**
 * 质押配置，管理员配置允许质押的自定义币种及规则
 *
 * @author auto
 * @date 2026-05-17
 */
@Entity
@Data
@Table(name = "staking_config")
public class StakingConfig {

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

    /** 产品名称（前台展示用） */
    @Column(nullable = false, length = 100, columnDefinition = "varchar(100) comment '产品名称'")
    private String productName;

    /** 质押币种单位（只允许自定义币种） */
    @Column(nullable = false, length = 50, columnDefinition = "varchar(50) comment '质押币种单位'")
    private String coinUnit;

    /** 最小质押金额 */
    @Column(columnDefinition = "decimal(26,8) default 0 comment '最小质押金额'")
    private BigDecimal minAmount = BigDecimal.ZERO;

    /** 最大质押金额，0 表示不限 */
    @Column(columnDefinition = "decimal(26,8) default 0 comment '最大质押金额，0不限'")
    private BigDecimal maxAmount = BigDecimal.ZERO;

    /** 锁定天数：到达此天数后开始解冻 */
    @Column(columnDefinition = "int default 30 comment '锁定天数'")
    private Integer lockDays = 30;

    /**
     * 释放类型
     * 0=到期一次性全额释放
     * 1=按周期分批释放
     */
    @Column(columnDefinition = "int default 0 comment '释放类型：0一次性 1分批'")
    private Integer releaseType = 0;

    /** 分批释放时：每批释放的周期（天） */
    @Column(columnDefinition = "int default 1 comment '分批释放周期天数'")
    private Integer releasePeriod = 1;

    /** 分批释放时：每次释放比例（由 100÷分批周期 自动计算，0.02 表示 2%，最后一批释放剩余全部） */
    @Column(columnDefinition = "decimal(10,4) default 0 comment '每次释放比例'")
    private BigDecimal releaseRate = BigDecimal.ZERO;

    /** 配置描述 */
    @Column(length = 500, columnDefinition = "varchar(500) comment '配置描述'")
    private String description;

    /**
     * 状态
     * 0=禁用，1=启用
     */
    @Column(columnDefinition = "int default 1 comment '状态：0禁用 1启用'")
    private Integer status = 1;

    /**
     * 是否自动发放空投（定时任务按日创建待领取记录）
     * 0=否，1=是
     */
    @Column(columnDefinition = "int default 0 comment '是否自动发放空投：0否 1是'")
    private Integer autoAirdropEnabled = 0;

    /**
     * 空投发放方式（autoAirdropEnabled=1 时有效）
     * 0=固定金额（每日每单）
     * 1=按质押金额比例
     */
    @Column(columnDefinition = "int default 0 comment '空投发放方式：0固定 1比例'")
    private Integer airdropDistributeType = 0;

    /** 固定发放金额（每日每单，airdropDistributeType=0 时有效） */
    @Column(columnDefinition = "decimal(26,8) default 0 comment '固定空投金额'")
    private BigDecimal airdropFixedAmount = BigDecimal.ZERO;

    /** 按质押金额比例（如 0.01 表示 1%，airdropDistributeType=1 时有效） */
    @Column(columnDefinition = "decimal(10,8) default 0 comment '空投比例'")
    private BigDecimal airdropRatio = BigDecimal.ZERO;

    /** 创建时间 */
    @CreationTimestamp
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    private Date createTime;

    /** 更新时间 */
    @UpdateTimestamp
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    private Date updateTime;
}
