package cn.axzo.msg.center.service.pending.response;

import cn.axzo.msg.center.api.custombutton.ProposedButtonFilter;
import cn.axzo.msg.center.api.custombutton.ProposedButtons;
import cn.axzo.msg.center.service.dto.ButtonRouterDTO;
import cn.axzo.msg.center.service.dto.DetailRouterDTO;
import cn.axzo.msg.center.service.dto.IdentityDTO;
import cn.axzo.msg.center.service.dto.MessageCardContentItemDTO;
import cn.axzo.msg.center.service.enums.AppTerminalTypeEnum;
import cn.axzo.msg.center.service.enums.BizCategoryEnum;
import cn.axzo.msg.center.service.enums.BizFinalStateEnum;
import cn.axzo.msg.center.service.enums.MessageCategoryEnum;
import cn.axzo.msg.center.service.enums.OrganizationTypeEnum;
import cn.axzo.msg.center.service.enums.PendingMessageStateEnum;
import cn.axzo.msg.center.service.enums.TodoQueryType;
import cn.axzo.msg.center.service.enums.TodoType;
import cn.axzo.msg.center.service.template.response.MessageDetailStyle;
import com.alibaba.fastjson.JSON;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import com.alibaba.fastjson.JSONObject;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;

import java.io.Serializable;
import java.util.Date;
import java.util.List;

/**
 * @description
 *   代办消息记录页面展示数模型
 * @author cold_blade
 * @date 2023/9/23
 * @version 1.0
 */
@Setter
@Getter
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class PendingMessageResponse implements Serializable, TodoButtonProvider {

    private static final long serialVersionUID = -4133864010679470398L;

    /**
     * 消息的唯一标识
     */
    private String identityCode;
    /**
     * 模板编码
     */
    private String templateCode;
    /**
     * 消息标题
     */
    private String title;
    /**
     * 消息内容
     */
    private String content;
    /**
     * 卡片信息
     */
    private List<MessageCardContentItemDTO> cardItems;
    /**
     * 代办发起者自然人id
     */
    private Long promoterPersonId;
    /**
     * 发起者姓名
     */
    private String promoterName;
    /**
     * 代办发起者身份
     */
    private IdentityDTO promoterIdentity;
    /**
     * 代办执行者自然人id
     */
    private Long executorPersonId;
    /**
     * 执行者姓名
     */
    private String executorName;
    /**
     * 代办执行者身份
     */
    private IdentityDTO executorIdentity;
    /**
     * 业务编码
     */
    private String bizCode;
    /**
     * 子业务编码
     */
    private String subBizCode;
    /**
     * 业务状态描述
     */
    private String bizDesc;
    /**
     * 业务标签
     */
    private String bizFlag;
    /**
     * 工作台id
     * <p>Deprecated, use {@link #executorWorkspaceId} instead
     */
    @Deprecated
    private Long workspaceId;
    /**
     * 工作台名称
     * <p>Deprecated, use {@link #executorWorkspaceName} instead
     */
    @Deprecated
    private String workspaceName;
    /**
     * 待办接收者的企业id
     * <p>Deprecated, use {@link #executorOuId} instead
     */
    @Deprecated
    private Long ouId;
    /**
     * 发起人工作台id
     */
    private Long promoterWorkspaceId;
    /**
     * 发起人工作台名称
     */
    private String promoterWorkspaceName;
    /**
     * 发起人企业类型
     */
    private OrganizationTypeEnum promoterWorkspaceType;
    /**
     * 发起人企业id
     */
    private Long promoterOuId;
    /**
     * 接收人工作台id
     */
    private Long executorWorkspaceId;
    /**
     * 接收人工作台名称
     */
    private String executorWorkspaceName;
    /**
     * 执行人企业类型
     */
    private OrganizationTypeEnum executorWorkspaceType;
    /**
     * 接收人企业id
     */
    private Long executorOuId;
    /**
     * 待办状态
     */
    private PendingMessageStateEnum state;
    /**
     * 业务类型
     */
    private BizCategoryEnum bizCategory;
    /**
     * 申请时间戳
     */
    private Long createTimestamp;
    /**
     * 处理时间戳
     */
    private Long updateTimestamp;
    /**
     * 待办截至时间戳
     */
    private Long deadlineTimestamp;
    /**
     * 业务详情路由
     */
    private DetailRouterDTO detailRouter;
    /**
     * 按钮路由
     */
    private List<ButtonRouterDTO> buttonRouters;
    /**
     * 业务终态的印章图片地址
     */
    private String bizFinalStateIcon;
    /**
     * 业务状态
     */
    private BizFinalStateEnum bizFinalState;
    /**
     * 在这个时间之前不显示
     */
    private Date hideUntil;

    /**
     * 模版类型
     */
    private MessageCategoryEnum templateCategory;
    /**
     * 待办样式
     */
    private MessageDetailStyle detailStyle;

    /**
     * 待办类型
     */
    private TodoType todoType;

    /**
     * 是否已读 (抄送)
     */
    private Boolean isRead;

    /**
     * 是否为今天创建
     */
    private Boolean isCreatedToday;

    /**
     * 查询类型
     *  HAS_BEEN_SENT: 待处理
     *  COMPLETED: 已处理
     *  SEND_BY_ME: 我发起
     *  COPIED_TO_ME: 抄送我
     */
    private TodoQueryType queryType;

    /**
     * 待办模版编码配置的终端类型列表
     */
    private List<AppTerminalTypeEnum> templateTerminals;

    /**
     * 业务类型
     */
    private BizCategoryEnum bizCategoryEnum;

    /**
     * 自定义按钮
     */
    private ProposedButtons proposedButtons;

    private JSONObject bizExtParamObj;
    private JSONObject routerExtParamObj;

    public void adjustProposedButtons(boolean forPromoter) {
        ProposedButtonFilter.adjustProposedButtons(this, forPromoter);
    }

    @Override
    public String toString() {
        return JSON.toJSONString(this);
    }

}
