package com.agileboot.codegen.mapper;

import com.agileboot.codegen.entity.TemplateUsageLog;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;

import java.time.LocalDateTime;
import java.util.List;

/**
 * 模板使用日志 Mapper接口
 * 
 * @author system
 * @date 2025-09-26
 */
@Mapper
public interface TemplateUsageLogMapper extends BaseMapper<TemplateUsageLog> {

    /**
     * 查询用户的模板使用历史
     *
     * @param userId    用户ID
     * @param startTime 开始时间
     * @param endTime   结束时间
     * @param limit     限制数量
     * @return 使用日志列表
     */
    @Select("SELECT * FROM template_usage_log WHERE user_id = #{userId} ORDER BY create_time DESC LIMIT 100")
    List<TemplateUsageLog> selectUserUsageHistory(@Param("userId") Long userId,
                                                 @Param("startTime") LocalDateTime startTime,
                                                 @Param("endTime") LocalDateTime endTime,
                                                 @Param("limit") Integer limit);

    /**
     * 查询模板使用统计
     *
     * @param templateSource 模板来源
     * @param templateId     模板ID
     * @param startTime      开始时间
     * @param endTime        结束时间
     * @return 使用次数
     */
    @Select("SELECT COUNT(*) FROM template_usage_log WHERE template_source = #{templateSource} AND template_id = #{templateId}")
    int countTemplateUsage(@Param("templateSource") String templateSource,
                          @Param("templateId") String templateId,
                          @Param("startTime") LocalDateTime startTime,
                          @Param("endTime") LocalDateTime endTime);

    /**
     * 查询热门模板统计
     *
     * @param startTime 开始时间
     * @param endTime   结束时间
     * @param limit     限制数量
     * @return 模板使用统计列表
     */
    @Select("SELECT template_source, template_id, template_name, template_group, COUNT(*) as use_count " +
            "FROM template_usage_log " +
            "GROUP BY template_source, template_id, template_name, template_group " +
            "ORDER BY use_count DESC LIMIT 10")
    List<TemplateUsageLog> selectPopularTemplates(@Param("startTime") LocalDateTime startTime,
                                                 @Param("endTime") LocalDateTime endTime,
                                                 @Param("limit") Integer limit);
}

