package com.njcn.rdms.module.project.service.project;

import com.njcn.rdms.module.project.controller.admin.project.vo.member.ProjectMemberBatchCreateReqVO;
import com.njcn.rdms.module.project.controller.admin.project.vo.member.ProjectMemberBatchInactiveReqVO;
import com.njcn.rdms.module.project.controller.admin.project.vo.member.ProjectMemberInactiveReqVO;
import com.njcn.rdms.module.project.controller.admin.project.vo.member.ProjectMemberRespVO;
import com.njcn.rdms.module.project.controller.admin.project.vo.member.ProjectMemberSaveReqVO;
import com.njcn.rdms.module.project.controller.admin.project.vo.member.ProjectMemberUpdateReqVO;

import java.util.List;

/**
 * 项目成员 Service 接口
 */
public interface ProjectMemberService {

    List<ProjectMemberRespVO> getProjectMemberList(Long projectId);

    Long createProjectMember(Long projectId, ProjectMemberSaveReqVO reqVO);

    /**
     * 批量新增项目成员（不承担经理交接语义；事务性入库，全部成功或整体回滚）。
     *
     * @param projectId 项目编号
     * @param reqVO 请求参数
     * @return 新建的成员关系 ID 列表，顺序与入参 members 一致
     */
    List<Long> batchCreateProjectMembers(Long projectId, ProjectMemberBatchCreateReqVO reqVO);

    void updateProjectMember(Long projectId, Long memberId, ProjectMemberUpdateReqVO reqVO);

    void inactiveProjectMember(Long projectId, Long memberId, ProjectMemberInactiveReqVO reqVO);

    /**
     * 批量移出项目成员（事务性更新，全部成功或整体回滚）。
     * <p>
     * 业务校验：同请求 memberId 重复、不存在/不属于当前项目、已失效、项目经理、仍担任未关闭执行负责人均拒绝；
     * 经理判定与单条 inactive 一致，按 project.managerUserId 比对。
     *
     * @param projectId 项目编号
     * @param reqVO 请求参数
     */
    void batchInactiveProjectMembers(Long projectId, ProjectMemberBatchInactiveReqVO reqVO);

}
