package incheon.ags.mrb.share.mapper;

import org.apache.ibatis.annotations.Param;

import incheon.ags.mrb.share.vo.RecipeShrnGroupMbrVO;

import java.util.List;

/**
 * 레시피 공유 그룹 멤버 매퍼 인터페이스
 * - 레시피 공유 그룹 멤버 정보 관리
 */
@org.egovframe.rte.psl.dataaccess.mapper.Mapper @incheon.com.config.annotation.MainDB public interface RecipeShrnGroupMbrMapper {

    /**
     * 그룹별 멤버 목록 조회
     * @param groupId 그룹 ID
     * @return 멤버 목록
     * @throws Exception
     */
    List<RecipeShrnGroupMbrVO> selectGroupMemberList(Integer groupId) throws Exception;

    /**
     * 그룹 멤버 상세 조회
     * @param groupId 그룹 ID
     * @param userId 사용자 ID
     * @return 멤버 상세 정보
     * @throws Exception
     */
    RecipeShrnGroupMbrVO selectGroupMemberDetail(@Param("groupId") Integer groupId, @Param("userId") String userId) throws Exception;

    /**
     * 그룹 멤버 추가
     * @param recipeShrnGroupMbrVO 멤버 정보
     * @throws Exception
     */
    void insertGroupMember(RecipeShrnGroupMbrVO recipeShrnGroupMbrVO) throws Exception;

    /**
     * 그룹 멤버 활성화 상태 수정
     * @param recipeShrnGroupMbrVO 멤버 정보 (groupId, userId, actvtnEn 필수)
     * @throws Exception
     */
    void updateGroupMemberStatus(RecipeShrnGroupMbrVO recipeShrnGroupMbrVO) throws Exception;

    /**
     * 그룹 멤버 삭제
     * @param groupId 그룹 ID
     * @param userId 사용자 ID
     * @throws Exception
     */
    void deleteGroupMember(@Param("groupId") Integer groupId, @Param("userId") String userId) throws Exception;

    /**
     * 그룹별 멤버 전체 삭제 (그룹 삭제 시)
     * @param groupId 그룹 ID
     * @throws Exception
     */
    void deleteGroupMembersByGroupId(Integer groupId) throws Exception;
}
