package incheon.ags.ias.comCd.mapper;

import incheon.ags.ias.comCd.vo.ComCdVO;
import incheon.ags.ias.comCd.vo.ComGroupCdVO;
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.COM_GROUP_CD, iccom.COM_CD
 */
@org.egovframe.rte.psl.dataaccess.mapper.Mapper @incheon.com.config.annotation.MainDB
public interface ComCdMapper {

    /* ========================================
     * 그룹코드 관련 메서드
     * ======================================== */

    /**
     * 그룹코드 목록 조회 (페이징)
     * @param vo 검색 조건 및 페이징 정보
     * @return 그룹코드 목록
     */
    List<ComGroupCdVO> selectComGroupCdList(ComGroupCdVO vo);

    /**
     * 그룹코드 총 개수 조회 (검색 조건 적용)
     * @param vo 검색 조건
     * @return 전체 그룹코드 수
     */
    ComGroupCdVO selectComGroupCdTotalCnt(ComGroupCdVO vo);

    /**
     * 그룹코드 사용여부별 개수 조회
     * @return 사용/미사용 카운트
     */
    ComGroupCdVO selectComGroupCdListUseCnt();

    /**
     * 그룹코드 상세 조회
     * @param groupCd 그룹코드
     * @return 그룹코드 상세 정보
     */
    ComGroupCdVO selectComGroupCdDetail(@Param("groupCd") String groupCd);

    /**
     * 그룹코드 등록
     * @param vo 그룹코드 정보
     * @return 등록 건수
     */
    int insertComGroupCd(ComGroupCdVO vo);

    /**
     * 그룹코드 수정
     * @param vo 그룹코드 정보
     * @return 수정 건수
     */
    int updateComGroupCd(ComGroupCdVO vo);

    /**
     * 그룹코드 삭제
     * @param vo 그룹코드 정보
     * @return 삭제 건수
     */
    int deleteComGroupCd(ComGroupCdVO vo);


    /* ========================================
     * 상세코드 관련 메서드
     * ======================================== */

    /**
     * 그룹코드별 상세코드 목록 조회
     * @param groupCd 그룹코드
     * @return 상세코드 목록
     */
    List<ComCdVO> getComCdByGroupCd(@Param("groupCd") String groupCd);

    /**
     * 상세코드 단건 조회
     * @param groupCd 그룹코드
     * @param cd 상세코드
     * @return 상세코드 정보
     */
    ComCdVO selectComCdDetail(@Param("groupCd") String groupCd, @Param("cd") String cd);

    /**
     * 상세코드 등록
     * @param vo 상세코드 정보
     * @return 등록 건수
     */
    int insertComCd(ComCdVO vo);

    /**
     * 상세코드 수정
     * @param vo 상세코드 정보
     * @return 수정 건수
     */
    int updateComCd(ComCdVO vo);

    /**
     * 상세코드 삭제
     * @param paramMap cd, groupCd 파라미터 맵
     * @return 삭제 건수
     */
    int deleteComCd(Map<String, Object> paramMap);

    /**
     * 상세코드 총 개수 조회
     * @return 전체 상세코드 수
     */
    ComCdVO getComCdTotalCnt();

    /**
     * 상세코드 사용여부별 개수 조회
     * @return 사용/미사용 카운트
     */
    ComCdVO getComCdListUseCnt();

    /**
     * 시스템 코드 목록 조회 (SYS 테이블 기반)
     * @return 시스템 코드 목록 (ComCdVO 형식)
     */
    List<ComCdVO> selectSysCdList();

}
