package com.fs.sop.domain;

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fs.common.annotation.Excel;
import lombok.Data;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;

/**
 * 企微sop对象 qw_sop
 *
 * @author fs
 * @date 2024-07-31
 */
@Data
public class QwSop implements Serializable
{

    /** id */
    @TableId(type = IdType.UUID)
    private String id;

    /** 规则名称 */
    @Excel(name = "规则名称")
    private String name;

    /** 状态 */
    @Excel(name = "状态")
    private Long status;

    /** 类别 1个人 2企业微信 */
    @Excel(name = "类别 1个人 2企业微信")
    private Integer type;

    /** qw_user主表的主键 */
    @Excel(name = "qw_user主表的主键")
    private String qwUserIds;

    @Excel(name = "公司编号")
    private Long companyId;

    /**
     发送类型 1定时接口发送 2 Ai接口发送 3完课 4ai新客对话
     **/
    private Integer sendType;
    private Integer filterMode;
    private String tags;

    private String excludeTags;

    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private String startTime;

    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private String createTime;

    private String tempId;

    /**
     * 过滤类别 1 包含全部 2 包含任意
     */
    private Integer filterType;

    private String corpId;

    private Integer expiryTime;

    /**
    *  是否开启新客户添加自动创建sop 1 否 2 是
    */
    private Integer isAutoSop;
    /**
    *   自动添加SOP的时间段
    */
    private String autoSopTime;

    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private String stopTime;

    private String createBy;
    private Integer minConversionDay;
    private Integer maxConversionDay;
    private Integer minSend;
    private Integer maxSend;
    // 语音生成状态
    private Integer voice;

    /**
    * 是否开启评级 1否 2是
    */
    private Integer isRating;

    private Integer courseDay;


    // 是否固定营期
    private Integer isFixed;
    // 是否只发送注册用户
    private Integer isRegister;
    // 进入营期打标签开始时间
    private Integer startDayNum;
    // 进入营期打标签结束时间
    private Integer endDayNum;
    // 添加的标签
    private String addTags;
    // 第几天开始发课
    private Integer courseDateNum;
    // 新课对话模板
    private String newTemplateId;
    private Long project;
    // 群聊ID
    private String chatId;


    /**
     * 销售id
     */
    @TableField(exist = false)
    private Long userId;

    /**
     * 销售部门
     */
    @TableField(exist = false)
    private List<Long> cuDeptIdList;

    /**
     * 部门类型 00 管理员 01 员工
     */
    @TableField(exist = false)
    private String userType;

    @TableField(exist = false)
    private List<Long> qwUserIdList = new ArrayList<>();  // 初始化

    @Excel(name = "开启评论或者弹幕，1-开启评论；2-开启弹幕；3-都关闭")
    @TableField(exist = false)
    private Integer openCommentStatus;

    /**
     * 是否按照营期 发送官方群发 1是 2否（否的时候按单链发）
     */
    private Integer isSampSend;
    private Integer isLiveMgs;
    private Long liveTempId;
    private String liveTempSendTime;
    private Integer autoGroup;
    private String autoGroupLevel;
    private String groupName;
    private Integer autoUserReg;
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private String pullTime;


    @TableField(exist = false)
    private List<String> userIds = new ArrayList<>();

    /** 公司是否强制评级 0否 1是 */
    @TableField(exist = false)
    private Integer level;


    private Integer pageNum;
    private Integer pageSize;

    public List<String> getUserIds() {
        if (userIds == null || userIds.isEmpty()) {
            return userIds;
        }

        // 直接在原始列表上修改
        for (int i = 0; i < userIds.size(); i++) {
            String id = userIds.get(i);
            if (id != null) {
                if (id.startsWith("dept_")) {
                    userIds.set(i, id.substring(5));
                } else if (id.startsWith("company_")) {
                    userIds.set(i, id.substring(8));
                } else if (id.startsWith("user_")) {
                    userIds.set(i, id.substring(5));
                }
            }
        }
        return userIds;
    }

    private String skipSopJson;

}
