package go.kr.project.system.menu.service;

import go.kr.project.system.menu.model.MenuSearchVO;
import go.kr.project.system.menu.model.MenuVO;

import java.util.List;

/**
 * packageName    : go.kr.project.system.menu.service
 * fileName       : MenuService
 * author         : 개발자
 * date           : 2023-06-01
 * description    : 메뉴 관련 비즈니스 로직을 처리하는 서비스 인터페이스
 * ===========================================================
 * DATE              AUTHOR             NOTE
 * -----------------------------------------------------------
 * 2023-06-01        개발자       최초 생성
 */
public interface MenuService {

    /**
     * 메뉴 ID를 자동 생성합니다.
     * 
     * @param menuLevel 메뉴 레벨
     * @param upperMenuId 상위 메뉴 ID
     * @return 생성된 메뉴 ID
     */
    String generateMenuId(int menuLevel, String upperMenuId);

    /**
     * 메뉴 정보를 등록합니다.
     * 
     * @param vo 등록할 메뉴 정보를 담은 VO 객체
     * @return 등록된 행의 수
     */
    int insertMenu(MenuVO vo);

    /**
     * 메뉴 정보를 수정합니다.
     * 
     * @param vo 수정할 메뉴 정보를 담은 VO 객체
     * @return 수정된 행의 수
     */
    int updateMenu(MenuVO vo);

    /**
     * 메뉴 정보를 삭제합니다.
     * 
     * @param menuId 삭제할 메뉴 ID
     * @return 삭제된 행의 수
     */
    int deleteMenu(String menuId);

    /**
     * 하위 메뉴 존재 여부를 확인합니다.
     * 
     * @param menuId 확인할 메뉴 ID
     * @return 하위 메뉴 개수
     */
    int countChildMenus(String menuId);

    /**
     * 메뉴 목록을 트리 구조로 조회합니다.
     * 
     * @param vo 검색 조건을 담은 VO 객체
     * @return 트리 구조의 메뉴 목록
     */
    List<MenuVO> selectMenuTreeList(MenuSearchVO paramVO);
}
