package com.vctgo.system.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.vctgo.system.api.domain.SysClassSetting;
import com.vctgo.system.api.domain.SysLocationSetting;
import com.vctgo.system.api.domain.SysReLocationClass;
import com.vctgo.system.api.domain.dto.SysLocationReClassDto;
import com.vctgo.system.domain.dto.SysLocationAttributeDto;
import com.vctgo.system.domain.vo.SysDownLocation;

import java.util.List;

/**
 * 位置设置Service接口
 *
 * @author caesar
 * @date 2023-05-30
 */
public interface ISysLocationSettingService {
    /**
     * 查询位置设置
     *
     * @param id 位置设置主键
     * @return 位置设置
     */
    SysLocationSetting selectSysLocationSettingById(Long id);

    /**
     * 通过名称查询位置是否重复
     */
    SysLocationSetting repeatCheck(SysLocationSetting sysLocationSetting);

    /**
     * 分页查询位置设置列表--区域组合在一起
     *
     * @param sysLocationSetting 位置设置
     * @return 位置设置集合
     */
    IPage<SysLocationSetting> selectSysLocationSettingPage(SysLocationSetting sysLocationSetting);

    /**
     * 分页查询位置设置列表--区域组合在一起
     *
     * @param sysLocationSetting 位置设置
     * @return 位置设置集合
     */
    IPage<SysLocationSetting> selectBookSysLocationSettingPage(SysLocationSetting sysLocationSetting);

    /**
     * 分页查询位置设置列表--区域分开，一条记录，一个区域
     *
     * @param sysLocationSetting 位置设置
     * @return 位置设置集合
     */
    IPage<SysLocationSetting> listDistinguishArea(SysLocationSetting sysLocationSetting);

    /**
     * 分页查询位置设置列表--区域分开，一条记录，一个区域
     *
     * @return 位置设置集合
     */
    List<String> listType();

    /**
     * 通过参数获取到所有符合条件的位置id
     *
     * @param sysLocationSetting 位置设置
     * @return 位置设置集合
     */
    List<SysLocationSetting> locationIdList(SysLocationSetting sysLocationSetting);

    /**
     *
     *
     * @param locationIdArray
     * @return
     */
    List<SysLocationSetting> locationIdList(Long[] locationIdArray);

    /**
     * 查询位置设置列表
     *
     * @param sysLocationSetting 位置设置
     * @return 位置设置集合
     */
    List<SysLocationSetting> selectSysLocationSettingList(SysLocationSetting sysLocationSetting);

    /**
     * 查询位置设置列表
     *
     * @param sysLocationSetting 位置设置
     * @return 位置设置集合
     */
    List<SysLocationSetting> getSysLocationList(SysLocationSetting sysLocationSetting);

    /**
     * 查询位置设置列表
     *
     * @param sysLocationReClassDto 位置设置
     * @return 位置设置集合
     */
    List<SysLocationReClassDto> getRelatedClassList(SysLocationReClassDto sysLocationReClassDto);


    List<SysLocationSetting>  selectLocationListByType(String type);

    /**
     * 新增位置设置
     *
     * @param sysLocationSetting 位置设置
     * @return 结果
     */
    int insertSysLocationSetting(SysLocationSetting sysLocationSetting);

    /**
     * 修改位置设置
     *
     * @param sysLocationSetting 位置设置
     * @return 结果
     */
    int updateSysLocationSetting(SysLocationSetting sysLocationSetting);

    /**
     * 批量删除位置设置
     *
     * @param ids 需要删除的位置设置主键集合
     * @return 结果
     */
    int deleteSysLocationSettingByIds(Long[] ids);

    /**
     * 删除位置设置信息
     *
     * @param id 位置设置主键
     * @return 结果
     */
    int deleteSysLocationSettingById(Long id);

    void bindOrUnBindClass(SysLocationSetting sysLocationSetting);

    List<SysLocationSetting> locationAndAreaList(String tenantId);

    List<SysLocationReClassDto> getRelatedLocationList(SysLocationReClassDto sysLocationReClassDto);

    List<SysDownLocation> getDownLocationList(SysLocationSetting sysLocationSetting);

    List<SysLocationSetting> getLocationSettingInfo(String attribute);

    List<SysLocationAttributeDto> getLocationSettingTree();


    List<SysReLocationClass> getLocationSettingInfoByClassId(String classId);

    List<SysReLocationClass> getLocationSettingInfoByClassIds(String classIds);

    List<SysClassSetting> selectClassByLocationId(String locationId);
}
