package com.ruoyi.analytics.mapper;

import java.util.List;

import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import com.ruoyi.analytics.domain.ReportInstance;

/**
 * 报表实例数据访问接口
 * 
 * @author ruoyi
 * @date 2025-12-19
 */
@Mapper
public interface ReportInstanceMapper
{
    /**
     * 查询报表实例
     * 
     * @param instanceId 报表实例主键
     * @return 报表实例
     */
    public ReportInstance selectReportInstanceByInstanceId(Long instanceId);

    /**
     * 根据报表ID查询报表实例
     * 
     * @param reportId 报表ID
     * @return 报表实例
     */
    public ReportInstance selectReportInstanceByReportId(String reportId);

    /**
     * 查询报表实例列表
     * 
     * @param reportInstance 报表实例
     * @return 报表实例集合
     */
    public List<ReportInstance> selectReportInstanceList(ReportInstance reportInstance);

    /**
     * 根据用户ID和报表类型查询报表实例列表
     * 
     * @param userId 用户ID
     * @param reportType 报表类型
     * @param status 状态
     * @return 报表实例集合
     */
    public List<ReportInstance> selectReportInstanceByUserAndType(@Param("userId") Long userId, 
                                                                 @Param("reportType") String reportType, 
                                                                 @Param("status") String status);

    /**
     * 新增报表实例
     * 
     * @param reportInstance 报表实例
     * @return 结果
     */
    public int insertReportInstance(ReportInstance reportInstance);

    /**
     * 修改报表实例
     * 
     * @param reportInstance 报表实例
     * @return 结果
     */
    public int updateReportInstance(ReportInstance reportInstance);

    /**
     * 删除报表实例
     * 
     * @param instanceId 报表实例主键
     * @return 结果
     */
    public int deleteReportInstanceByInstanceId(Long instanceId);

    /**
     * 根据报表ID删除报表实例
     * 
     * @param reportId 报表ID
     * @return 结果
     */
    public int deleteReportInstanceByReportId(String reportId);

    /**
     * 批量删除报表实例
     * 
     * @param instanceIds 需要删除的数据主键集合
     * @return 结果
     */
    public int deleteReportInstanceByInstanceIds(Long[] instanceIds);

    /**
     * 查询过期的报表实例
     * 
     * @param days 过期天数
     * @return 过期报表实例列表
     */
    public List<ReportInstance> selectExpiredReportInstances(@Param("days") Integer days);

    /**
     * 统计用户报表数量
     * 
     * @param userId 用户ID
     * @param reportType 报表类型
     * @return 报表数量
     */
    public Long countReportInstancesByUser(@Param("userId") Long userId, @Param("reportType") String reportType);
}