package com.fs.company.mapper;

import com.fs.company.domain.CompanyDeptUserInfo;
import com.fs.company.domain.ComprehensiveDailyStats;
import com.fs.company.domain.CourseWatchLogData;
import com.fs.company.dto.CompanyDeptUserInfoDTO;
import com.fs.statis.dto.ComprehensiveStatisticsDTO;
import com.fs.statis.param.ComprehensiveStatisticsParam;
import org.apache.ibatis.annotations.Param;

import java.util.Date;
import java.util.List;

/**
 * @description:
 * @author: Guos
 * @time: 2025/10/30 上午9:25
 */
public interface StatisticManageMapper {

    /**
     * 插入数据
     * @param comprehensiveDailyStats
     */
    Integer insert(ComprehensiveDailyStats comprehensiveDailyStats);

    /**
     * 根据id更新数据
     * @param comprehensiveDailyStats
     */
    Integer updateById(ComprehensiveDailyStats comprehensiveDailyStats);

    /**
     * 根据userId和日期更新数据
     * @param comprehensiveDailyStats
     */
    Integer updateByUserAndDate(ComprehensiveDailyStats comprehensiveDailyStats);

    /**
     * 根据deptId和日期查询数据
     * @param deptId
     * @param statisticsTime
     */
    ComprehensiveDailyStats selectByDeptAndDate(@Param("deptId") Long deptId, @Param("statisticsTime") Date statisticsTime);

    /**
     * 根据用户id和日期查询是否有数据
     * @param userId
     * @param statisticsTime
     */
    ComprehensiveDailyStats selectByUserAndDate(@Param("userId") Long userId, @Param("statisticsTime") Date statisticsTime);

    /**
     * 根据用户id和日期查询是否有数据
     * @param userId
     * @param statisticsTime
     */
    Integer countByUserAndDate(@Param("userId") Long userId, @Param("statisticsTime") Date statisticsTime);

    /**
     * 根据id删除数据
     * @param id
     */
    Integer deleteById(@Param("id") Long id);

    /**
     * 按照个人统计
     * @param dimension 维度
     * @param startTime
     * @param endTime
     * @param userIds
     */
    List<ComprehensiveDailyStats> getStatisticNumByPersonal(@Param("dimension")Integer dimension, @Param("startTime") Date startTime, @Param("endTime") Date endTime, @Param("userIds") Long... userIds);

    /**
     * 按照部门统计
     * @param startTime
     * @param endTime
     * @param deptIds
     */
    List<ComprehensiveDailyStats> getStatisticNumByDeptId(@Param("startTime") Date startTime, @Param("endTime") Date endTime, @Param("deptIds") Long... deptIds);

    //========================

    //获取公司、部门、员工信息
    List<CompanyDeptUserInfo> getCompanyAndDeptAndDeptUserList(@Param("companyId") Long companyId);

    List<CompanyDeptUserInfo> getCompanyInfo();

    CompanyDeptUserInfoDTO getStatisticNum(@Param("userIds") Long userIds);

    /**
     * 根据公司id获取部门下拉搜索信息
     * @param id
     */
    List<CompanyDeptUserInfo> getSearchDeptInfo(@Param("id") Long id);

    /**
     * 根据部门id获取用户下拉信息
     * @param id
     */
    List<CompanyDeptUserInfo> getSearchUserInfo(@Param("id") Long id);

    /**
     *
     * 获取部门统计数据
     * @param companyUserId
     * @param dateTime
     * @return
     */
    List<CourseWatchLogData> getCourseWatchLogData(@Param("companyUserId") Long companyUserId, @Param("dateTime") Date dateTime);

    /**
     *
     * 获取部门统计数据
     * @param companyUserId
     * @param videoId
     * @param dateTime
     * @return
     */
    CourseWatchLogData getAnswerAndRedPacketData(@Param("companyUserId")Long companyUserId, @Param("videoId")Long videoId, @Param("dateTime") Date dateTime);

    /**
     * 按照部门获取数据
     * @param param
     */
    ComprehensiveStatisticsDTO getStatisticDataByDeptId(ComprehensiveStatisticsParam param);

    /**
     * 根据用户id获取用户的详细信息
     * @param id
     */
    CompanyDeptUserInfo getUserInfoByUserId(@Param("userId") Long id);

    /**
     * 根据用户id获取用户的详细信息
     * @param id
     */
    CompanyDeptUserInfo getUserInfoByDeptId(@Param("deptId") Long id);
}
