package com.ssyf.module.robot.domain.entity;

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import java.io.Serializable;
import java.time.LocalDateTime;
import java.util.Date;
import lombok.Data;
import lombok.experimental.Accessors;

/**
 * 运行配置表
 * @TableName r_running_config
 */
@TableName(value ="r_running_config")
@Data
@Accessors(chain = true)
public class RRunningConfig implements Serializable {
    /**
     * 主键ID
     */
    @TableId(type = IdType.AUTO)
    private Long id;

    /**
     * 运行配置唯一标识
     */
    private String uuid;

    /**
     * 配置名称
     */
    private String configName;

    /**
     * 备注信息
     */
    private String notes;

    /**
     * 时长单位：1秒，2分，3时，4天 ，5周 ，6月 ，7年；
     * 默认（为空）为：秒
     */
    private Integer durationUnit;

    /**
     * 在线人数最小值
     */
    private Integer minOnlineUsers;

    /**
     * 在线人数最大值
     */
    private Integer maxOnlineUsers;

    /**
     * 人气排名最小值
     */
    private Integer minPopularityRank;

    /**
     * 人气排名最大值
     */
    private Integer maxPopularityRank;

    /**
     * 开播时长最小值（单位：秒）
     */
    private Integer minLiveDuration;

    /**
     * 开播时长最大值（单位：秒）
     */
    private Integer maxLiveDuration;

    /**
     * 停留时长最小值（单位：秒）
     */
    private Integer minStayDuration;

    /**
     * 停留时长最大值（单位：秒）
     */
    private Integer maxStayDuration;

    /**
     * 重复进入间隔时长
     */
    private Integer repeatEnteinterval;

    /**
     * 切换直播间间隔时长
     */
    private Integer switchLiveInterval;

    /**
     * 重复进入周期（1=小时，2=天，3=周，4=月）
     */
    private Integer repeatEntecycle;

    /**
     * 重复进入直播间次数
     */
    private Integer repeatEntetimes;

    /**
     * 点赞概率（0-100）
     */
    private Integer likeProbability;

    /**
     * 免费热度使用次数最小值
     */
    private Integer minFreeHeatTimes;

    /**
     * 免费热度使用次数最大值
     */
    private Integer maxFreeHeatTimes;

    /**
     * 分享直播间概率（0-100）
     */
    private Integer shareProbability;

    /**
     * 专属状态，0 否 ；1 是。
     * 专属运行配置的数据，不受全局的影响。
     */
    private Integer exclusive;

    /**
     * 流量爬坡规则 (JSON格式)
     * 示例: [{"minute":0,"count":50},{"minute":10,"count":150}]
     */
    private String rampUpRules;

    /**
     * 关注概率（0-100）
     */
    private Integer followProbability;

    /**
     * 聊天开关（0=关闭，1=开启）
     */
    private Integer chatSwitch;

    /**
     * 送礼开关（0=关闭，1=开启）
     */
    private Integer giftSwitch;

    /**
     * 活动开关（0=关闭，1=开启）
     */
    private Integer activitySwitch;

    /**
     * 状态（0=禁用，1=启用）
     */
    private Integer status;

    /**
     * 送礼配置唯一标识
     */
    private String giftConfigUuid;

    /**
     * 送礼配置名称
     */
    private String giftConfigName;

    /**
     * 创建时间
     */
    private LocalDateTime createTime;

    /**
     * 创建人
     */
    private String creator;

    /**
     * 创建人唯一编码
     */
    private String creatorUuid;

    @TableField(exist = false)
    private static final long serialVersionUID = 1L;

    /**
     * 将指定数值从当前时长单位转换为秒
     * @param value 待转换的数值
     * @return 转换后的秒数
     */
    private Integer convertToSeconds(Integer value) {
        if (value == null || this.durationUnit == null) {
            return value;
        }

        switch (this.durationUnit) {
            case 1: // 秒
                return value;
            case 2: // 分
                return value * 60;
            case 3: // 时
                return value * 3600;
            case 4: // 天
                return value * 86400;
            case 5: // 周
                return value * 604800;
            case 6: // 月（按30天计算）
                return value * 2592000;
            case 7: // 年（按365天计算）
                return value * 31536000;
            default:
                return value; // 默认按秒处理
        }
    }

    /**
     * 获取开播时长最小值（秒）
     * @return 秒数
     */
    public Integer getMinLiveDurationInSeconds() {
        return convertToSeconds(this.minLiveDuration);
    }

    /**
     * 获取开播时长最大值（秒）
     * @return 秒数
     */
    public Integer getMaxLiveDurationInSeconds() {
        return convertToSeconds(this.maxLiveDuration);
    }

    /**
     * 获取停留时长最小值（秒）
     * @return 秒数
     */
    public Integer getMinStayDurationInSeconds() {
        return convertToSeconds(this.minStayDuration);
    }

    /**
     * 获取停留时长最大值（秒）
     * @return 秒数
     */
    public Integer getMaxStayDurationInSeconds() {
        return convertToSeconds(this.maxStayDuration);
    }

    /**
     * 获取切换直播间间隔时长（秒）
     * @return 秒数
     */
    public Integer getSwitchLiveIntervalInSeconds() {
        return convertToSeconds(this.switchLiveInterval);
    }

    /**
     * 获取重复进入间隔时长（秒）
     * @return 秒数
     */
    public Integer getRepeatEnteintervalInSeconds() {
        return convertToSeconds(this.repeatEnteinterval);
    }

}