package com.haha.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import com.haha.entity.dto.CheckinQueryDTO;
import com.haha.entity.dto.CheckinSubmitDTO;
import com.haha.entity.CheckinRecord;

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

/**
 * 签到服务接口
 */
public interface CheckinRecordService extends IService<CheckinRecord> {

    /**
     * 提交签到
     *
     * @param dto    签到信息
     * @param userId 用户ID
     * @param userName 用户名
     * @param userNo 用户工号
     * @return 签到记录
     */
    CheckinRecord submitCheckin(CheckinSubmitDTO dto, Long userId, String userName, String userNo);

    /**
     * 分页查询签到记录
     *
     * @param query 查询条件
     * @return 分页结果
     */
    IPage<Map<String, Object>> getCheckinPage(CheckinQueryDTO query);

    /**
     * 获取签到详情
     *
     * @param id 签到ID
     * @return 签到详情
     */
    Map<String, Object> getCheckinDetail(Long id);

    /**
     * 获取签到统计数据
     *
     * @return 统计数据
     */
    Map<String, Object> getCheckinStats();

    /**
     * 获取用户今日签到状态
     *
     * @param userId 用户ID
     * @return 今日签到状态
     */
    Map<String, Object> getTodayCheckin(Long userId);

    /**
     * 同步离线签到记录
     *
     * @param records 离线签到记录列表
     * @return 同步结果
     */
    Map<String, Object> syncOfflineCheckins(List<CheckinRecord> records);

    /**
     * 从离线数据Map构建签到记录并同步
     *
     * @param recordsData 离线签到数据列表
     * @param userId 用户ID
     * @return 同步结果
     */
    Map<String, Object> syncOfflineCheckinsFromData(List<Map<String, Object>> recordsData, Long userId);

    /**
     * 导出签到记录
     *
     * @param query 查询条件
     * @return 导出文件URL
     */
    String exportCheckinRecords(CheckinQueryDTO query);

    /**
     * 检查用户今日是否已签到指定类型
     *
     * @param userId     用户ID
     * @param checkinType 签到类型
     * @return 是否已签到
     */
    boolean hasTodayCheckin(Long userId, String checkinType);
}
