package com.vctgo.system.mapper;

import com.baomidou.mybatisplus.annotation.InterceptorIgnore;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.vctgo.common.mybatisplus.mapper.BaseMapperX;
import com.vctgo.system.api.domain.SysClassSetting;
import com.vctgo.system.api.domain.SysLocationSetting;
import com.vctgo.system.api.domain.SysReLocationArea;
import com.vctgo.system.api.domain.SysReLocationClass;
import com.vctgo.system.api.domain.dto.ObserveChildhoodNewDto;
import com.vctgo.system.api.domain.dto.ToySysClassSettingDto;
import com.vctgo.system.domain.SysAreaSetting;
import com.vctgo.system.domain.dto.SysClassInfoDto;
import com.vctgo.system.domain.dto.SysClassSettingDto;
import com.vctgo.system.domain.dto.SysTreeClassInfo;
import com.vctgo.system.domain.vo.SysDownLocation;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import java.util.List;
import java.util.Map;

/**
 * 班级设置Mapper接口
 *
 * @author caesar
 * @date 2023-05-30
 */
@Repository
public interface SysClassSettingMapper extends BaseMapperX<SysClassSetting>
{

    /**
     * 查询班级设置列表-分页
     *
     * @param sysClassSetting 班级设置
     * @return 班级设置集合
     */
    IPage<SysClassSetting> selectSysClassSettingList(Page page,@Param("query") SysClassSetting sysClassSetting);

    /**
     * 查询班级设置列表-分页
     *
     * @param sysClassSetting 班级设置
     * @return 班级设置集合
     */
    IPage<SysClassSetting> selectClassReInfoList(Page page,@Param("query") SysClassSetting sysClassSetting);

    /**
     * 查询班级设置列表
     *
     * @param sysClassSetting 班级设置
     * @return 班级设置集合
     */
    List<SysClassSetting> selectSysClassSettingList(@Param("query") SysClassSetting sysClassSetting);

    /**
     * 获取班级树形结构
     *
     * @return 班级设置
     */
    @InterceptorIgnore(tenantLine = "1")
    List<SysTreeClassInfo> selectSysTreeClassList(@Param("tenantId") Long tenantId);

    /**
     * 获取班级树形结构
     *
     * @return 班级设置
     */
    @InterceptorIgnore(tenantLine = "1")
    List<SysTreeClassInfo> selectClassTreeLevelTwoList(@Param("tenantId") Long tenantId);

    @InterceptorIgnore(tenantLine = "1")
    List<ObserveChildhoodNewDto> selectTreeClassChildList(@Param("query") ObserveChildhoodNewDto observeChildhoodDto);


    /**
     * 获取班级树形结构
     *
     * @return 班级设置
     */
    @InterceptorIgnore(tenantLine = "1")
    List<SysTreeClassInfo> selectClassTreeLevelThreeList(@Param("tenantId") Long tenantId);

    /**
     * 根据相应参数查询班级配置人员信息列表
     *
     * @param params 参数
     * @return 幼儿园集团管理集合
     */
    List<SysClassInfoDto> selectSysReClassInfoListByParams(@Param("params") Map<String, Object> params);

    /**
     * 更新班级删除状态
     *
     * @param ids 需要删除的数据主键集合
     * @return 结果
     */
    int updateDeletedStatusByIds(@Param("ids") Long[] ids,
                                 @Param("query") SysClassSetting sysClassSetting);

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

    /**
     * 通过位置获取已经绑定的班级
     *
     * @param locationId
     * @return
     */
    List<SysClassSetting> selectSysClassSettingBind(@Param("locationId") String locationId);

    /**
     * 通过位置获取没有绑定的班级
     *
     * @param locationId
     * @return
     */
    List<SysClassSetting> selectSysClassSettingUnBind(@Param("locationId") String locationId);

    /**
     * 通过id获取位置id
     *
     * @param ids
     * @return
     */
    Long[] getLocationIdList(@Param("ids")Long[] ids);

    /**
     * 获取班级列表
     *
     * @return
     */
    @InterceptorIgnore(tenantLine = "1")
    List<SysDownLocation> getDownLocationList(@Param("query") SysClassSetting sysClassSetting);

    /**
     * 通过老师信息获取当前老师绑定的班级信息
     *
     * @param userId 教师Id
     * @return
     */
    List<SysClassSetting> selectSysClassUserByUserId(@Param("userId") String userId);

    /**
     * 通过老师信息获取当前老师绑定的班级信息
     *
     * @param classId 班级Id
     * @return
     */
    List<SysReLocationArea> selectLocationAndAreaByClassId(@Param("classId") String classId);

    /**
     * 通过年级或班级Id获取位置和区域信息
     *
     * @param gradeIn 年级
     * @param classIds 班级
     * @return
     */
    List<SysReLocationArea> selectLocationAndAreaByGradeInAndClass(@Param("gradeIn") String[] gradeIn,
                                                                   @Param("classIds") String[] classIds);

    /**
     * 通过位置Id获取位置和区域信息
     *
     * @param locationIds 位置Id
     * @return
     */
    List<SysReLocationArea> selectLocationAndAreaByLocationId(@Param("locationIds") String[] locationIds);

    /**
     * 班级id
     *
     * @param classIds
     * @return
     */
    List<SysAreaSetting> selectAreaList(@Param("classIds") String[] classIds, @Param("locationIds") String[] locationIds);

    List<SysClassSetting> selectClassListByLocationIds(@Param("locationIds") String[] locationIds);

    /**
     * 通过位置查询班级信息
     * @param locationId
     * @return
     */
    @InterceptorIgnore(tenantLine = "1")
    List<SysClassSetting> getClassListByLocationId(@Param("locationId")Long locationId);

    @InterceptorIgnore(tenantLine = "1")
    List<SysClassSettingDto> getClassListByLocationIdList(@Param("locationIds")List<Long> locationIds);

    @InterceptorIgnore(tenantLine = "1")
    List<ToySysClassSettingDto> getLocationByGradeIn(@Param("query") ToySysClassSettingDto sysClassSettingDto);
    List<SysReLocationArea> selectLocationAndAreaList();

    @InterceptorIgnore(tenantLine = "1")
    List<SysClassSetting> getClassSetting(@Param("locationIds")String[] locationIds);

    List<SysClassSetting> selectClassSettingAndLocation();

    List<SysLocationSetting> selectLocationList(@Param("classIds") String[] classIds);

    @InterceptorIgnore(tenantLine = "1")
    SysClassSetting getClassSettingInfo(@Param("id")Long id);

    List<SysClassSetting> getAreaSetting();

    List<SysReLocationClass> getSysReLocationClassByClassId(@Param("classIds")String classIds);

    List<SysAreaSetting> selectAreaByLocationIdList(@Param("locationIdList")String locationIdList);
    List<SysAreaSetting> selectOthreArea(@Param("query") SysClassSetting sysClassSetting);

}
