package shop.alien.store.service;

import shop.alien.entity.result.R;
import shop.alien.entity.store.LifeSysDept;
import shop.alien.entity.store.dto.LifeSysDeptAddDto;
import shop.alien.entity.store.dto.LifeSysDeptSortDto;
import shop.alien.entity.store.dto.LifeSysDeptUpdateDto;
import shop.alien.entity.store.vo.LifeSysDeptVo;
import shop.alien.entity.store.vo.LifeSysVo;

import java.util.List;

/**
 * 部门表 服务接口
 *
 * @author system
 * @since 2025-01-XX
 */
public interface LifeSysDeptService {

    /**
     * 新增部门
     *
     * @param addDto 新增部门信息
     * @return R<LifeSysDept>
     */
    R<LifeSysDept> addDept(LifeSysDeptAddDto addDto);

    /**
     * 更新一级部门排序
     *
     * @param sortDto 排序信息（部门ID列表，按排序顺序）
     * @return R<Boolean>
     */
    R<Boolean> updateFirstLevelDeptSort(LifeSysDeptSortDto sortDto);

    /**
     * 删除部门
     *
     * @param deptId 部门ID
     * @return R<Boolean>
     */
    R<Boolean> deleteDept(Long deptId);

    /**
     * 编辑部门
     *
     * @param updateDto 编辑部门信息
     * @return R<LifeSysDept>
     */
    R<LifeSysDept> updateDept(LifeSysDeptUpdateDto updateDto);

    /**
     * 根据部门名称搜索部门（模糊查询，返回树形结构）
     *
     * @param deptName 部门名称（支持模糊查询）
     * @return R<List<LifeSysDeptVo>>
     */
    R<List<LifeSysDeptVo>> searchDeptByName(String deptName);

    /**
     * 查看部门成员
     *
     * @param deptId 部门ID
     * @return R<List<LifeSysVo>>
     */
    R<List<LifeSysVo>> viewMembers(Integer pageNum, Integer pageSize, Long deptId);
}

