package com.microservices.pms.enterprise.service;

import com.microservices.common.core.web.page.GenericsTableDataInfo;
import com.microservices.pms.enterprise.domain.PmsEnterprise;
import com.microservices.pms.enterprise.domain.vo.GitLinkUserToEnterpriseInputVo;
import com.microservices.pms.enterprise.domain.vo.GitLinkUserToEnterpriseVo;
import com.microservices.pms.enterprise.domain.vo.WorkbenchUrlDataVo;
import com.microservices.system.api.domain.SimpleSysRole;
import com.microservices.system.api.domain.SimpleSysUser;

import java.util.List;

/**
 * 项目管理企业Service接口
 *
 * @author otto
 * @date 2023-10-10
 */
public interface IPmsEnterpriseService {
    /**
     * 查询项目管理企业
     *
     * @param id 项目管理企业主键
     * @return 项目管理企业
     */
    public PmsEnterprise selectPmsEnterpriseById(Long id);

    /**
     * 查询项目管理企业列表
     *
     * @param pmsEnterprise 项目管理企业
     * @return 项目管理企业集合
     */
    public GenericsTableDataInfo<PmsEnterprise> selectMyPmsEnterpriseList(PmsEnterprise pmsEnterprise);

    /**
     * 新增项目管理企业
     *
     * @param pmsEnterprise 项目管理企业
     * @return 结果
     */
    public String insertPmsEnterprise(PmsEnterprise pmsEnterprise);

    /**
     * 修改项目管理企业
     *
     * @param pmsEnterprise 项目管理企业
     * @return 结果
     */
    public int updatePmsEnterprise(PmsEnterprise pmsEnterprise);

    /**
     * 删除项目管理企业信息
     *
     * @param id       项目管理企业主键
     * @param password
     * @return 结果
     */
    public int deletePmsEnterpriseById(Long id, String password);

    PmsEnterprise selectPmsEnterpriseByIdentifier(String identifier);

    /**
     * 获取企业下用户列表
     *
     * @param enterpriseId
     * @param search
     * @param pageNum
     * @param pageSize
     * @return
     */
    GenericsTableDataInfo<SimpleSysUser> getUserListById(Long enterpriseId, String search, Integer pageNum, Integer pageSize);

    /**
     * 检查用户是否在企业中
     *
     * @param enterpriseId 企业id
     * @param userId       用户Id
     */
    boolean checkUserInEnterprise(Long enterpriseId, Long userId);

    /**
     * 通过企业标识查询企业下用户列表
     *
     * @param enterpriseIdentifier 企业标识
     * @param search
     * @param pageNum              当前记录起始索引
     * @param pageSize             每页显示记录数
     * @return 用户列表
     */
    GenericsTableDataInfo<SimpleSysUser> getUserListByEnterpriseIdentifier(String enterpriseIdentifier, String search, Integer pageNum, Integer pageSize);

    /**
     * 根据gitlink组织id创建企业
     *
     * @param gitlinkOrgId                       gitlink组织id
     * @param gitLinkUserToEnterpriseInputVoList 列表
     * @return 企业标识
     */
    String createByGitlinkOrgId(Long gitlinkOrgId, List<GitLinkUserToEnterpriseInputVo> gitLinkUserToEnterpriseInputVoList);

    /**
     * 获取Gitlink组织下用户列表
     *
     * @param gitlinkOrgId gitlink组织Id
     * @return 用户列表
     */
    GenericsTableDataInfo<GitLinkUserToEnterpriseVo> getGitlinkUserList(Long gitlinkOrgId);

    /**
     * 根据企业标识删除企业
     *
     * @param enterpriseIdentifier 企业标识
     * @param password             用户密码
     * @return 结果
     */
    int deletePmsEnterpriseByIdentifier(String enterpriseIdentifier, String password);

    /**
     * 根据组织Id查找企业
     *
     * @param deptId 组织Id
     * @return 企业信息
     */
    PmsEnterprise selectPmsEnterpriseByDeptId(Long deptId);

    Long initGitlinkOrgAdminTeam(String enterpriseIdentifier);

    Long initGitlinkOrgWriteTeam(String enterpriseIdentifier);

    Boolean changeUserGitlinkRole(Long userId, Long deptId, Long oldRoleId, Long newRoleId);

    /**
     * 根据权限标识查找用户列表
     *
     * @param enterpriseIdentifier 企业标识
     * @param search               模糊查询
     * @param perms                权限标识
     * @return 用户列表
     */
    GenericsTableDataInfo<SimpleSysUser> getUserListByPerms(String enterpriseIdentifier, String search, String perms);

    GenericsTableDataInfo<SimpleSysRole> getRoleList();

    WorkbenchUrlDataVo getWorkbenchUrl(Long gitlinkOrgId);

    void increaseOpenEnterpriseProcessCount(Long gitlinkOrgId);

    void decreaseOpenEnterpriseProcessCount(Long gitlinkOrgId);
}
