package com.agileboot.codegen.mapper;

import com.agileboot.codegen.entity.UserTemplate;
import com.agileboot.common.mybatis.mapper.BaseMapperDelete;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.Update;

import java.util.List;

/**
 * 用户模板 Mapper接口
 *
 * @author system
 * @date 2025-09-26
 */
@Mapper
public interface UserTemplateMapper extends BaseMapperDelete<UserTemplate> {

    /**
     * 查询公开模板列表
     *
     * @param templateGroup 模板分组（可选）
     * @return 公开模板列表
     */
    @Select("SELECT * FROM user_template WHERE is_public = 1 AND status = 1 AND deleted = 0 ORDER BY use_count DESC, create_time DESC")
    List<UserTemplate> selectPublicTemplates(@Param("templateGroup") String templateGroup);

    /**
     * 检查模板名称是否存在（同一用户下）
     *
     * @param userId       用户ID
     * @param templateName 模板名称
     * @param excludeId    排除的模板ID（更新时使用）
     * @return 存在的数量
     */
    @Select("SELECT COUNT(*) FROM user_template WHERE user_id = #{userId} AND template_name = #{templateName} AND deleted = 0 AND (#{excludeId} IS NULL OR id != #{excludeId})")
    int checkTemplateNameExists(@Param("userId") Long userId,
                                @Param("templateName") String templateName,
                                @Param("excludeId") Long excludeId);

    /**
     * 增加模板使用次数
     *
     * @param id 模板ID
     * @return 更新行数
     */
    @Update("UPDATE user_template SET use_count = use_count + 1 WHERE id = #{id}")
    int increaseUseCount(@Param("id") Long id);

    /**
     * 根据用户ID和状态查询模板数量
     *
     * @param userId 用户ID
     * @param status 状态
     * @return 模板数量
     */
    @Select("SELECT COUNT(*) FROM user_template WHERE user_id = #{userId} AND status = #{status} AND deleted = 0")
    int countByUserIdAndStatus(@Param("userId") Long userId, @Param("status") Integer status);
}
