package shop.alien.storeplatform.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import shop.alien.entity.store.StorePlatformMenu;

import java.util.List;

/**
 * 商家PC菜单权限表 服务类
 *
 * @author system
 * @since 2025-01-XX
 */
public interface StorePlatformMenuService extends IService<StorePlatformMenu> {

    /**
     * 分页查询菜单列表
     *
     * @param page     页码
     * @param size     页容
     * @param menuName 菜单名称（支持模糊查询）
     * @param menuType 菜单类型（M目录 C菜单 F按钮）
     * @param status   菜单状态（0正常 1停用）
     * @return IPage<StorePlatformMenu>
     */
    IPage<StorePlatformMenu> getMenuPage(int page, int size, String menuName, String menuType, String status);

    /**
     * 根据ID查询菜单详情
     *
     * @param menuId 菜单ID
     * @return StorePlatformMenu
     */
    StorePlatformMenu getMenuById(Long menuId);

    /**
     * 新增菜单
     *
     * @param menu 菜单信息
     * @return 是否成功
     */
    boolean saveMenu(StorePlatformMenu menu);

    /**
     * 修改菜单
     *
     * @param menu 菜单信息
     * @return 是否成功
     */
    boolean updateMenu(StorePlatformMenu menu);

    /**
     * 删除菜单（逻辑删除）
     *
     * @param menuId 菜单ID
     * @return 是否成功
     */
    boolean deleteMenu(Long menuId);

    /**
     * 修改菜单状态
     *
     * @param menuId 菜单ID
     * @param status 菜单状态（0正常 1停用）
     * @return 是否成功
     */
    boolean updateStatus(Long menuId, String status);

    /**
     * 查询所有正常状态的菜单列表（树形结构）
     *
     * @return List<StorePlatformMenu>
     */
    List<StorePlatformMenu> getMenuTree();

    /**
     * 根据父菜单ID查询子菜单列表
     *
     * @param parentId 父菜单ID
     * @return List<StorePlatformMenu>
     */
    List<StorePlatformMenu> getMenusByParentId(Long parentId);

    /**
     * 根据层级查询菜单列表
     *
     * @param level 菜单层级（1一级菜单 2二级菜单 3三级菜单）
     * @return List<StorePlatformMenu>
     */
    List<StorePlatformMenu> getMenusByLevel(Integer level);
}
