package com.sdtool.common.api;

import com.sdtool.common.entity.base.ZTreeData;
import com.sdtool.common.entity.site.ERPTokenUser;
import com.sdtool.common.entity.system.Menu;
import com.sweetfish.service.RetResult;
import org.rex.RMap;

import java.util.List;

public interface MenuService extends ScriptService {

    /**
     * 获取菜单列表，供增加、编辑、删除使用
     *
     * @param searchData 查询条件
     * @return 菜单列表
     */
    @SuppressWarnings("rawtypes")
    RetResult<List<Menu>> getMenuList(RMap searchData, String dataSourceId, long supplierCode);

    /**
     * 获取菜单树形结构，填充ztree
     *
     * @return 菜单列表
     */
    RetResult<List<ZTreeData>> getMenuTreeData(String dataSourceId, long supplierCode);

    RetResult<List<ZTreeData>> getMenuTreeData2(String dataSourceId, long supplierCode);

    /**
     * 获取菜单信息
     *
     * @param menuId 菜单id
     * @return 菜单
     */
    RetResult<Menu> getMenuInfo(long menuId, String dataSourceId, long supplierCode);

    /**
     * 增加菜单
     *
     * @param menu        菜单信息
     * @param currentUser 操作人
     * @return 操作信息
     */
    RetResult<Menu> addMenu(Menu menu, ERPTokenUser currentUser, String dataSourceId, long supplierCode);

    /**
     * 修改菜单
     *
     * @param menu        菜单信息
     * @param currentUser 操作人
     * @return 操作信息
     */
    RetResult<Menu> updateMenu(Menu menu, ERPTokenUser currentUser, String dataSourceId, long supplierCode);

    /**
     * 删除菜单
     *
     * @param menu        菜单信息
     * @param currentUser 操作人
     * @return 操作信息
     */
    RetResult<Menu> removeMenu(Menu menu, ERPTokenUser currentUser, String dataSourceId, long supplierCode);

    /**
     * 请求删除菜单，删除菜单容易误操作，这里做一下验证
     *
     * @param menu         菜单信息
     * @param currentUser  操作人
     * @param dataSourceId 分库
     * @param supplierCode 分表
     * @return 待删除的菜单列表
     */
    RetResult<List<Menu>> requestDeleteMenu(Menu menu, ERPTokenUser currentUser, String dataSourceId, long supplierCode);

    /**
     * 请求删除菜单，删除菜单容易误操作，这里做一下验证
     *
     * @param menu         菜单信息
     * @param currentUser  操作人
     * @param dataSourceId 分库
     * @param supplierCode 分表
     * @return 待删除的菜单列表
     */
    RetResult<Menu> deleteMenu(Menu menu, ERPTokenUser currentUser, String dataSourceId, long supplierCode);


}
