package cn.nianxx.thhotel.platform.navigation.repository;

import cn.nianxx.thhotel.platform.common.dto.PlatformPageSnapshot;
import cn.nianxx.thhotel.platform.navigation.domain.PlatformMenuEntity;
import java.util.List;
import java.util.Optional;

/**
 * 平台菜单仓储。负责菜单定义和当前用户可见菜单查询。
 */
public interface PlatformNavigationRepository {

    /**
     * 按菜单代码查询菜单定义。
     */
    Optional<PlatformMenuEntity> findMenuByCode(String menuCode);

    /**
     * 按菜单内部 ID 查询菜单定义。
     */
    Optional<PlatformMenuEntity> findMenuById(Long menuId);

    /**
     * 查询全部菜单定义。
     */
    List<PlatformMenuEntity> listAllMenus();

    /**
     * 管理后台分页查询菜单。
     */
    PlatformPageSnapshot<PlatformMenuEntity> queryMenus(String keyword, String menuStatus, int pageNum, int pageSize);

    /**
     * 新增菜单定义。
     */
    void insertMenu(PlatformMenuEntity menu);

    /**
     * 更新菜单定义。
     */
    void updateMenu(PlatformMenuEntity menu);

    /**
     * 查询指定权限集合可见的启用菜单。
     */
    List<PlatformMenuEntity> listVisibleMenus(List<String> permissionCodes);
}
