package com.malk.guangming.repository.entity.primary;

import com.malk.base.BasePo;
import lombok.Data;
import lombok.EqualsAndHashCode;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Index;
import javax.persistence.Table;
import java.util.Date;

/**
 * 钉钉开放平台应用 → 角色映射
 * <p>
 * BasePo 自动注入 id / createTime / updateTime,无需重复声明。
 */
@Entity
@Data
@EqualsAndHashCode(callSuper = true)
@Table(name = "t_dingtalk_app_mapping",
        indexes = {
                @Index(name = "uk_app_key", columnList = "appKey", unique = true),
                @Index(name = "idx_agent_id", columnList = "agentId"),
                @Index(name = "idx_app_name", columnList = "appName")
        })
public class DingTalkAppMappingPo extends BasePo {

    /** 应用名称(即未来角色名) */
    private String appName;

    /** 应用分组,如 集团应用 / DHR人力助手 */
    private String appGroup;

    /** 钉钉 agentId */
    private String agentId;

    /** 钉钉应用 appKey */
    private String appKey;

    /** 保留字段,本期不用(corp 级凭据已够) */
    private String appSecret;

    /** 全表共享同一值,首次创建后回写所有行 */
    private String roleGroupId;

    /** 本期不创建,第二期回写 */
    private String roleId;

    /** 角色标签:正常 "分组 - 应用名",全员可见 "全员(无角色)",用于回写 axls 角色列 */
    @Column(length = 128)
    private String roleLabel;

    /** 可见范围原始 deptIds JSON 数组 */
    @Column(columnDefinition = "TEXT")
    private String rawDeptIds;

    /** 可见范围原始 userIds JSON 数组 */
    @Column(columnDefinition = "TEXT")
    private String rawUserIds;

    /** 部门展开后去重 userId JSON 数组;全员可见时为空 */
    @Column(columnDefinition = "MEDIUMTEXT")
    private String expandedUsers;

    /** 展开后人数;全员可见时为空 */
    private Integer expandedCount;

    /** 是否全员可见(deptIds 含 1) */
    private Boolean isAllVisible;

    /** 钉钉 isHidden 字段 */
    private Boolean isHidden;

    private Date lastSyncAt;

    /** pending / success / failed */
    private String syncStatus;

    @Column(length = 512)
    private String lastErrMsg;
}
