package cn.axzo.workflow.common.model.request.bpmn.task;

import java.io.Serializable;
import javax.validation.constraints.NotBlank;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;
import org.springframework.util.StringUtils;


/**
 * 统一的工作流中的人员模型,兼容不同的业务方,如安心筑"唯一"人的定义需要工作台+身份 ID+身份类型;<br/>
 * 而枢智业务则只需要简单的 userId 即可
 * <p>
 * 为了解决各种业务的差异,统一定义该模型,以大范围覆盖小范围的方式进行兼容.
 *
 * @author wangli
 */
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@Accessors(chain = true)
public class BpmnTaskDelegateAssigner implements Serializable {

    private static final long serialVersionUID = -8106887960942113552L;

    /**
     * 审核人标识, 应该必传
     * <p>
     * 枢智:用户 ID
     * 安心筑:身份 ID
     */
    @NotBlank(message = "审核人标识不能为空")
    private String assignee;

    /**
     * 审核人标识扩展信息, 非必传
     * <p>
     * 枢智:可不传
     * 安心筑:身份 Type
     */
    private String assigneeType;

    /**
     * 审核人姓名, 应该必传
     * <p>
     * 枢智:用户姓名
     * 安心筑:用户姓名
     */
    @NotBlank(message = "审核人姓名不能为空")
    private String assignerName;

    /**
     * 对应安心筑特殊的PersonId, 非必传
     * <p>
     * 仅安心筑使用
     */
    private String personId;

    /**
     * 所属租户, 必传
     * <p>
     * 枢智: 企业 ID
     * 安心筑: 工作台 ID
     */
    @NotBlank(message = "租户不能为空")
    private String tenantId;

    /**
     * 人所在的单位 ID
     * 仅安心筑使用
     */
    private String ouId;

    public String buildAssigneeId() {
        if (StringUtils.hasLength(assigneeType)) {
            return assignee + "_" + assigneeType;
        }
        return assignee;
    }
}
