package com.bonus.material.ma.service;

import java.util.List;

import com.bonus.common.biz.domain.TreeSelect;
import com.bonus.common.core.web.domain.AjaxResult;
import com.bonus.material.ma.domain.Type;
import com.bonus.material.ma.domain.vo.MaTypeConfigVo;
import com.bonus.material.ma.domain.vo.MaTypeVo;
import com.bonus.material.ma.domain.vo.MaTypeSelectVo;

/**
 * 物资类型Service接口
 * @author syruan
 */
public interface ITypeService {
    /**
     * 查询物资类型
     * 
     * @param typeId 物资类型主键
     * @return 物资类型
     */
    Type selectTypeByTypeId(Long typeId);

    List<Integer> selectParentId(MaTypeVo type);

    List<Type> getEquipmentType(Long typeId, String typeName);

    List<MaTypeSelectVo> selectMaTypeListByHouseId(Long houseId);

    List<MaTypeVo> getListByParentId(Long typeId, MaTypeVo type);

    /**
     * 查询物资类型下拉树结构--根据上级ID
     * @param parentId 父级id
     */
    List<MaTypeSelectVo> getMaTypeSelectVoListByParentId(Long parentId);

    /**
     * 查询物资类型列表
     * 
     * @param type 物资类型
     * @return 物资类型集合
     */
    List<Type> selectTypeList(Type type);

    List<Type> selectTypeList4Keeper(Type type);

    List<Type> selectTypeList4Repair(Type type);

    List<MaTypeVo> selectTypeListAndParentInfo(Type type);


    /**
     * 查询4级加3级的所有物资类型，携带父级信息
     * @param type 参数
     */
    List<MaTypeConfigVo> selectThreeFourLevelTypeListAndParent(Type type);

    /**
     * 新增物资类型
     * 
     * @param type 物资类型
     * @return 结果
     */
    int insertType(Type type);

    /**
     * 修改物资类型
     * 
     * @param type 物资类型
     * @return 结果
     */
    int updateType(Type type);

    /**
     * 批量删除物资类型
     * 
     * @param typeIds 需要删除的物资类型主键集合
     * @return 结果
     */
    int deleteTypeByTypeIds(Long[] typeIds);

    /**
     * 删除物资类型信息
     * 
     * @param typeId 物资类型主键
     * @return 结果
     */
    AjaxResult deleteTypeByTypeId(Long typeId);

    List<TreeSelect> getMaTypeTree(String typeName, String parentId);

    AjaxResult getMaTypeTreeSelect(String typeName,String parentId);

    /**
     * 构建前端所需要树结构
     *
     * @param maTypeList 状态列表
     * @return 树结构列表
     */
    List<Type> buildMaTypeTree(List<Type> maTypeList);

//    AjaxResult getMaTypeConfigList(MaTypeConfigDto maTypeConfigDto);

    List<MaTypeVo> getMyTypeAndBindUsers(List<MaTypeVo> list);
}
