package incheon.ags.ias.user.mapper;

import incheon.ags.ias.user.vo.UserSearchVO;
import incheon.ags.ias.user.vo.UserVO;
import incheon.com.config.annotation.MainDB;
import org.egovframe.rte.psl.dataaccess.mapper.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;
import java.util.Map;

/**
 * 사용자 관리 Mapper
 * 테이블: iccom.USER
 */
@org.egovframe.rte.psl.dataaccess.mapper.Mapper @incheon.com.config.annotation.MainDB
public interface UserMapper {

    /* ========================================
     * 사용자 관련 메서드
     * ======================================== */

    /**
     * 사용자 목록 조회 (페이징)
     * @param userSearchVO 검색 조건 및 페이징 정보
     * @return 사용자 목록
     */
    List<Map<String, Object>> selectUserList(UserSearchVO userSearchVO);

    /**
     * 사용자 총 개수 조회 (검색 조건 적용)
     * @param userSearchVO 검색 조건
     * @return 전체 사용자 수
     */
    int selectUserCnt(UserSearchVO userSearchVO);

    /**
     * 사용자 상세 조회
     * @param userVO 사용자 정보 (userId 필수)
     * @return 사용자 상세 정보
     */
    UserVO selectUserDetail(UserVO userVO);

    /**
     * 사용자 등록
     * @param userVO 사용자 정보
     * @return 등록 건수
     */
    int insertUser(UserVO userVO);

    /**
     * 사용자 수정
     * @param userVO 사용자 정보
     * @return 수정 건수
     */
    int updateUser(UserVO userVO);

    /**
     * 사용자 삭제
     * @param userVO 사용자 정보 (userId 필수)
     * @return 삭제 건수
     */
    int deleteUser(UserVO userVO);

    /* ========================================
     * 부서/직급 관련 메서드
     * ======================================== */

    /**
     * 부서 목록 조회
     * @return 부서 목록
     */
    List<Map<String, Object>> deptList();

    /**
     * 직급 목록 조회
     * @return 직급 목록
     */
    List<Map<String, Object>> jbgdList();

    /**
     * 사용자 상태별 개수 조회
     * @return 사용자 상태별 카운트
     */
    Map<String, Object> selectUserStatusCnt();

    /**
     * 부서별 사용자 수 조회
     * @return 부서별 사용자 수
     */
    List<Map<String, Object>> selectUserCntByDept();
}
