package com.takensoft.cms.codeManage.service;

import com.takensoft.cms.codeManage.vo.CodeManageVO;
import com.takensoft.cms.dept.vo.DeptVO;
import com.takensoft.common.HierachyVO;

import java.util.List;

/**
 * @author  : takensoft
 * @since   : 2024.04.09
 *
 * 공통코드 정보 관련 인터페이스
 */
public interface CodeManageService {
    /**
     * @author takensoft
     * @since 2024.04.09
     * 코드 중복 검사
     */
    public boolean findByCheckCd(CodeManageVO codeManageVO) throws Exception;

    /**
     * @author takensoft
     * @since 2024.04.09
     * 코드 등록
     */
    public int cdSave(CodeManageVO codeManageVO) throws Exception;

    /**
     * @author takensoft
     * @since 2024.04.15
     * 코드 수정
     */
    public int cdUpdate(CodeManageVO codeManageVO) throws Exception;

    /**
     * @author takensoft
     * @since 2024.04.09
     * 전체 코드 조회 [관리자용 ]
     */
    public List<CodeManageVO> findTopCd() throws Exception;

    /**
     * @author takensoft
     * @since 2024.04.09
     * 하위 코드 조회
     */
    public List<CodeManageVO> findByChildCd(String cd) throws Exception;

    /**
     * @author takensoft
     * @since 2024.04.09
     * 코드 상세 조회
     */
    public CodeManageVO findByCd(String cd) throws Exception;

    /**
     * @author takensoft
     * @since 2024.04.15
     * 특정 공통 목록 코드 조회(시스템 처리용)
     */
    public CodeManageVO findByCdSystem(String cd) throws Exception;

    /**
     * @author takensoft
     * @since 2024.04.19
     * 하위 코드 조회(cache)
     */
    public List<CodeManageVO> findByChildCdCache(String cd) throws Exception;

    /**
     * @author takensoft
     * @since 2024.04.23
     * 코드 삭제
     */
    public int cdDelete(String cd) throws Exception;

    /************************************** Hierachy 전용 **************************************/
    /**
     * @author takensoft
     * @since 2024.04.24
     * 최상위 코드 조회
     */
    public List<HierachyVO> findByTopNode();
    /**
     * @author takensoft
     * @since 2024.04.24
     * 하위 코드 조회
     */
    public List<HierachyVO> findChildNode(String id);
    /************************************** Hierachy 전용 **************************************/

    /**
     * @author 박정하
     * @since 2024.05.10
     * 공통 코드 목록 수정
     */
    public int updateList(List<HierachyVO> deptList) throws Exception;
    /**
     * @author 박정하
     * @since 2024.05.10
     * 하위 코드 수정
     */
    public int updateChildNode(List<HierachyVO> childList, CodeManageVO upCodeManageVO) throws Exception;
}