package com.cool.modules.dailyreport.service;

import com.cool.core.base.BaseService;
import com.cool.modules.dailyreport.entity.DailyReportEntity;

import java.time.LocalDate;
import java.util.List;
import java.util.Map;

/**
 * 日报服务接口
 */
public interface DailyReportService extends BaseService<DailyReportEntity> {

    /**
     * 保存草稿
     *
     * @param entity 日报实体
     * @return 保存结果
     */
    DailyReportEntity saveDraft(DailyReportEntity entity);

    /**
     * 提交日报
     *
     * @param entity 日报实体
     * @return 提交结果
     */
    DailyReportEntity submitReport(DailyReportEntity entity);

    /**
     * 更新日报
     *
     * @param entity 日报实体
     * @return 更新结果
     */
    DailyReportEntity updateReport(DailyReportEntity entity);

    /**
     * 获取用户指定日期的日报
     *
     * @param userId     用户ID
     * @param reportDate 日报日期
     * @return 日报实体，不存在则返回null
     */
    DailyReportEntity getByUserIdAndDate(Long userId, LocalDate reportDate);

    /**
     * 查询用户的日报列表
     *
     * @param userId    用户ID
     * @param startDate 开始日期
     * @param endDate   结束日期
     * @param status    状态（null表示全部）
     * @return 日报列表
     */
    List<DailyReportEntity> getUserReports(Long userId, LocalDate startDate, LocalDate endDate, Integer status);

    /**
     * 获取统计信息
     *
     * @param startDate 开始日期
     * @param endDate   结束日期
     * @return 统计信息
     */
    Map<String, Object> getStatistics(LocalDate startDate, LocalDate endDate);

    /**
     * 获取未提交人员列表
     *
     * @param reportDate 日报日期
     * @return 未提交人员ID列表
     */
    List<Long> getUnsubmittedUserIds(LocalDate reportDate);
}
