package com.cico.nest.lcdp.boot.core.system.dal.dataobject.dept;

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.KeySequence;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.cico.nest.lcdp.boot.core.system.dal.dataobject.user.AdminUserDO;
import com.cico.nest.lcdp.boot.tenant.core.db.TenantBaseDO;
import com.cico.nest.lcdp.framework.api.dept.dto.LcdpDeptDTO;
import com.cico.nest.lcdp.framework.common.enums.CommonStatusEnum;
import lombok.Data;
import lombok.EqualsAndHashCode;

import java.util.List;

/**
 * 部门表
 *
 * @author zws
 */
@TableName("system_dept")
@KeySequence("system_dept_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库，可不写。
@Data
@EqualsAndHashCode(callSuper = true)
public class DeptDO extends TenantBaseDO {

    public static final String PARENT_ID_ROOT = "0";

    public static final Integer PARENT_LEVEL = 39101;//参考隧道管控的组织等级：39101一级 ~ 39106六级

    /**
     * 部门ID
     */
    @TableId(type = IdType.ASSIGN_UUID)
    private String id;
    /**
     * 部门名称
     */
    private String name;
    /**
     * 父部门ID
     *
     * 关联 {@link #id}
     */
    private String parentId;
    /**
     * 显示顺序
     */
    private Integer sort;
    /**
     * 负责人
     *
     * 关联 {@link AdminUserDO#getId()}
     */
    private Long leaderUserId;
    /**
     * 联系电话
     */
    private String phone;
    /**
     * 邮箱
     */
    private String email;
    /**
     * 部门状态（0正常 1停用）
     *
     * 枚举 {@link CommonStatusEnum}
     */
    private Integer status;

    /**
     * 部门等级:39101一级，39102二级，39103三级，39104四级，39105五级，39106六级
     */
    private Integer level;

    /*****  以下是全息隧道参考隧道管控新增的字段  *****/
    /**
     * 组织编码
     */
    private String code;
    /**
     * 别名
     */
    private String alias;
    /**
     * 部门类型(见字典):39001省中心，39002-监控中心，39003-区域监控中心，39004-监控分中心，39005-隧道所，39006-救援站
     */
    private String type;
    /**
     * 板块id
     */
    private String plateId;
    /**
     * 管理处
     */
    private String adminName;
    /**
     * 集团内外(见字典)：39201集团内，39202集团外
     */
    private String inGroup;
    /**
     * 纬度信息
     */
    private String latitude;
    /**
     * 经度信息
     */
    private String longitude;
    /**
     * 备注
     */
    private String remarks;

    /**
     * 转换为登录部门对象
     * @param dept 部门对象
     * @return 登录部门对象
     */
    public static LcdpDeptDTO toDeptDTO(DeptDO dept){
        LcdpDeptDTO deptDTO = new LcdpDeptDTO();
        deptDTO.setId(dept.getId());
        deptDTO.setName(dept.getName());
        deptDTO.setParentId(dept.getParentId());
        deptDTO.setManagerStaffId(String.valueOf(dept.getLeaderUserId()));
        deptDTO.setLevel(dept.getLevel());
        return deptDTO;
    }

    public static List<LcdpDeptDTO> toDeptDTO(List<DeptDO> deptList){
        return deptList.stream().map(DeptDO::toDeptDTO).toList();
    }


}
