package com.yingpaipay.business.service;

import com.yingpaipay.business.domain.bo.*;
import com.yingpaipay.business.domain.vo.*;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.common.mybatis.core.page.PageQuery;

import java.util.Collection;
import java.util.List;

/**
 * 项目管理Service接口
 *
 * @author Huanyi
 * @date 2025-12-05
 */
public interface IProjectService {

    /**
     * 查询项目管理
     *
     * @param id 主键
     * @return 项目管理
     */
    ProjectVo queryById(Long id);

    /**
     * 分页查询项目管理列表
     *
     * @param bo        查询条件
     * @param pageQuery 分页参数
     * @return 项目管理分页列表
     */
    TableDataInfo<ProjectVo> queryPageList(ProjectBo bo, PageQuery pageQuery);

    /**
     * 查询符合条件的项目管理列表
     *
     * @param bo 查询条件
     * @return 项目管理列表
     */
    List<ProjectVo> queryList(ProjectBo bo);

    /**
     * 新增项目管理
     *
     * @param bo 项目管理
     * @return 是否新增成功
     */
    Boolean insertByBo(ProjectBo bo);

    /**
     * 修改项目管理
     *
     * @param bo 项目管理
     * @return 是否修改成功
     */
    Boolean updateByBo(ProjectBo bo);

    /**
     * 校验并批量删除项目管理信息
     *
     * @param ids     待删除的主键集合
     * @param isValid 是否进行有效性校验
     * @return 是否删除成功
     */
    Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);

    List<ProjectListByNameVo> getListByName(String name);

    List<ProjectListByNameVo> getList();

    int updateStatus(ProjectUpdateStatusBo bo);

    TableDataInfo<ProjectMemberListVo> selectMemberListById(Long id, PageQuery pageQuery);

    TableDataInfo<ProjectOnDocumentVo> listOnDocument(ProjectOnDocumentBo bo, PageQuery pageQuery);

    TableDataInfo<ProjectMemberNotInCenterVo> queryMemberNotInCenter(Long projectId, Long folderId, String name, PageQuery pageQuery);

    TableDataInfo<ProjectInDashboardWorkbenchVo> queryPageListOnDashboardWorkbench(ProjectListOnDashboardWorkbenchBo bo, PageQuery pageQuery);

    boolean insertUser(ProjectAddMemberBo bo);

    ProjectFolderVo getFoldersByUserId(Long userId, Long projectId);

    boolean updateFolders(ProjectMemberUpdateFoldersBo bo);

}
