package com.haha.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.haha.entity.Menu;

import java.util.List;
import java.util.Map;

/**
 * 菜单服务接口
 */
public interface MenuService extends IService<Menu> {

    /**
     * 获取所有菜单（扁平列表）
     *
     * @return 菜单列表
     */
    List<Menu> getAllMenus();

    /**
     * 根据菜单名称搜索
     *
     * @param title 菜单名称
     * @return 菜单列表
     */
    List<Menu> searchByTitle(String title);

    /**
     * 创建菜单
     *
     * @param menu 菜单信息
     * @return 创建的菜单
     */
    Menu createMenu(Menu menu);

    /**
     * 更新菜单
     *
     * @param menu 菜单信息
     * @return 更新后的菜单
     */
    Menu updateMenu(Menu menu);

    /**
     * 删除菜单（逻辑删除，同时删除子菜单）
     *
     * @param id 菜单ID
     */
    void deleteMenu(Long id);

    /**
     * 根据用户角色ID列表获取该用户可见的菜单树
     *
     * @param roleIds 角色ID列表
     * @return 菜单树（前端 asyncRoutes 格式）
     */
    List<Map<String, Object>> getUserMenuTree(List<Long> roleIds);

    /**
     * 获取角色的菜单ID列表
     *
     * @param roleId 角色ID
     * @return 菜单ID列表
     */
    List<Long> getMenuIdsByRoleId(Long roleId);

    /**
     * 批量更新菜单排序
     *
     * @param menus 菜单列表（仅需 id 和 rank 字段）
     */
    void updateSort(List<Menu> menus);

    /**
     * 保存角色的菜单关联
     *
     * @param roleId 角色ID
     * @param menuIds 菜单ID列表
     */
    void saveRoleMenus(Long roleId, List<Long> menuIds);
}
