package com.yfd.platform.system.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.yfd.platform.system.domain.SysMenu;
import org.springframework.web.multipart.MultipartFile;

import java.io.FileNotFoundException;
import java.util.List;
import java.util.Map;

/**
 * <p>
 * 菜单及按钮 服务类
 * </p>
 *
 *
 * @since 2021-12-15
 */
public interface ISysMenuService extends IService<SysMenu> {

    /***********************************
     * 用途说明：获取菜单结构树（含按钮）
     * 参数说明
     *  systemcode      系统
     *  name            名称
     * isdisplay       是否显示
     * 返回值说明:  菜单结构树集合
     ***********************************/
    List<Map<String,Object>> getMenuButtonTree(String systemcode, String name, String isdisplay);

    /***********************************
     * 用途说明：获取菜单结构树（不含按钮）
     * 参数说明
     *  systemcode      系统
     *  name            名称
     * isdisplay       是否显示
     * 返回值说明:  菜单结构树集合
     ***********************************/
    List<Map<String,Object>> getMenuTree(String systemcode, String name, String isdisplay);


    /***********************************
     * 用途说明：新增菜单及按钮
     * 参数说明
     * sysMenu        菜单或按钮表对象
     * 返回值说明:   是否添加成功提示
     ***********************************/
    boolean addMenu(SysMenu sysMenu);

    /***********************************
     * 用途说明：上传单个图标
     * 参数说明
     * id          上传图标id
     * icon        图标
     * 返回值说明:   是否上传成功
     ***********************************/
    boolean uploadIcon(String id, MultipartFile icon);

    /***********************************
     * 用途说明：根据id删除单个图标
     * 参数说明
     * id          删除图标id
     * icon        图标名称
     * 返回值说明:   是否删除成功
     ***********************************/
    boolean deleteIcon(String id);

    /***********************************
     * 用途说明：菜单及按钮序号排序
     * 参数说明
     * parentid    上级id
     * orderMap    map<菜单及按钮表id,排列序号>
     * 返回值说明:   是否更新成功
     ***********************************/
    boolean moveOrderno(String parentid, String id, int orderno);

    /***********************************
     * 用途说明：根据id删除菜单或按钮
     * 参数说明
     * id        删除列的id
     * 返回值说明:   是否删除成功
     ***********************************/
    boolean deleteById(String id);

    boolean changeOderNoById(String fromId, String toId);

    List<Map<String, Object>> getMenuTree(String id);

    /***********************************
     * 用途说明：权限分配
     * 参数说明
     *  systemcode      系统
     *  name            名称
     *  isdisplay       是否显示
     * 返回值说明:  菜单结构树集合
     ***********************************/
    List<Map<String, Object>> permissionAssignment(String code,String roleId);

    String uploadIcon(MultipartFile icon) throws FileNotFoundException;

    /**********************************
    * 用途说明: 根据系统类型获取用户菜单结构树
    * 参数说明 id
    * 参数说明 sysetmCode
    * 返回值说明: java.util.List<java.util.Map<java.lang.String,java.lang.Object>>
    ***********************************/
    List<Map<String, Object>> getMenuTreeByType(String id, String sysetmCode);
}
