package incheon.ags.ias.sys.mapper;

import incheon.ags.ias.sys.vo.SysSearchVO;
import incheon.ags.ias.sys.vo.SysVO;
import incheon.com.config.annotation.MainDB;
import org.egovframe.rte.psl.dataaccess.mapper.Mapper;

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

/**
 * 시스템 관리 Mapper
 * 테이블: iccom.SYS
 */
@org.egovframe.rte.psl.dataaccess.mapper.Mapper @incheon.com.config.annotation.MainDB
public interface SysMapper {

    /* ========================================
     * 시스템 관련 메서드
     * ======================================== */

    /**
     * 시스템 목록 조회 (페이징)
     * @param sysSearchVO 검색 조건 및 페이징 정보
     * @return 시스템 목록
     */
    List<Map<String, Object>> selectSysList(SysSearchVO sysSearchVO);

    /**
     * 시스템 총 개수 조회 (검색 조건 적용)
     * @param sysSearchVO 검색 조건
     * @return 전체 시스템 수
     */
    int selectSysListCnt(SysSearchVO sysSearchVO);

    /**
     * 시스템 상세 조회
     * @param sysVO 시스템 정보 (sysCd 필수)
     * @return 시스템 상세 정보
     */
    SysVO selectSysDetail(SysVO sysVO);

    /**
     * 시스템 등록
     * @param sysVO 시스템 정보
     * @return 등록 건수
     */
    int insertSys(SysVO sysVO);

    /**
     * 시스템 수정
     * @param sysVO 시스템 정보
     * @return 수정 건수
     */
    int updateSys(SysVO sysVO);

    /**
     * 시스템 삭제
     * @param sysVO 시스템 정보 (sysCd 필수)
     * @return 삭제 건수
     */
    int deleteSys(SysVO sysVO);

    /* ========================================
     * 전체 조회 및 부서 관련 메서드
     * ======================================== */

    /**
     * 전체 시스템 목록 조회 (공통코드용)
     * @return 전체 시스템 목록
     */
    List<Map<String, Object>> selectAllSysList();

    /**
     * 시스템별 부서 목록 조회
     * @return 시스템별 부서 목록
     */
    List<Map<String, Object>> selectSysDeptList();

    /**
     * 시스템 상태별 개수 조회
     * @return 시스템 상태별 카운트
     */
    Map<String, Object> selectSysStatusCnt();

    /**
     * 시스템별 사용자 수 조회
     * @return 시스템별 사용자 수
     */
    List<Map<String, Object>> selectUserCntBySys();
}