package incheon.ags.ias.comCd.service;

import incheon.ags.ias.comCd.vo.ComCdVO;
import incheon.ags.ias.comCd.vo.ComGroupCdVO;

import java.util.List;

/**
 * 공통코드 Service 인터페이스
 */
public interface ComCdService {

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

    /**
     * 그룹코드 목록 조회 (페이징)
     */
    List<ComGroupCdVO> selectComGroupCdList(ComGroupCdVO vo) throws Exception;

    /**
     * 그룹코드 총 개수 조회 (검색 조건 적용)
     */
    ComGroupCdVO selectComGroupCdTotalCnt(ComGroupCdVO vo) throws Exception;

    /**
     * 그룹코드 사용여부별 개수 조회
     */
    ComGroupCdVO selectComGroupCdListUseCnt() throws Exception;

    /**
     * 그룹코드 상세 조회
     */
    ComGroupCdVO selectComGroupCdDetail(String groupCd) throws Exception;

    /**
     * 그룹코드 등록
     */
    int insertComGroupCd(ComGroupCdVO vo) throws Exception;

    /**
     * 그룹코드 수정
     */
    int updateComGroupCd(ComGroupCdVO vo) throws Exception;

    /**
     * 그룹코드 삭제
     */
    int deleteComGroupCd(String groupCd) throws Exception;


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

    /**
     * 그룹코드별 상세코드 목록 조회
     */
    List<ComCdVO> getComCdByGroupCd(String groupCd) throws Exception;

    /**
     * 상세코드 단건 조회
     */
    ComCdVO getComCdDetail(String groupCd, String cd) throws Exception;

    /**
     * 상세코드 등록
     */
    int insertComCd(ComCdVO vo) throws Exception;

    /**
     * 상세코드 수정
     */
    int updateComCd(ComCdVO vo) throws Exception;

    /**
     * 상세코드 삭제
     */
    int deleteComCd(String cd, String groupCd) throws Exception;

    /**
     * 상세코드 총 개수 조회
     */
    ComCdVO getComCdTotalCnt() throws Exception;

    /**
     * 상세코드 사용여부별 개수 조회
     */
    ComCdVO getComCdListUseCnt() throws Exception;

    /**
     * 공통코드명 조회 (JSP EL Function 및 유틸리티용)
     * @param groupCd 그룹코드
     * @param cd 상세코드
     * @return 코드명 (cdNm), 없으면 "-"
     */
    String getCodeName(String groupCd, String cd);

    /**
     * 시스템 코드 목록 조회 (SYS 테이블 기반)
     * @return 시스템 코드 목록 (ComCdVO 형식으로 변환)
     */
    List<ComCdVO> getSystemCodeList() throws Exception;

}
