package modules.news;

import com.jfinal.kit.StrKit;
import com.jfinal.plugin.activerecord.Db;
import common.model.News;

import java.util.ArrayList;
import java.util.List;

public class NewsService {
    public String hello() {
        return "Hello news";
    }

    public boolean save(News news) {
        return news.save();
    }
    
    public News findNewsById(String id) {
        return News.dao.findById(id);
    }

    /**
     * 查询 NEWS 记录的总数量，支持按名称进行模糊搜索
     * 如果 keywords 为 null 或空字符串，则返回所有记录的总数。
     *
     * @param keywords 可选参数，用于 title 或 content 字段的模糊匹配。
     * @return 符合条件的 NEWS 记录总数
     */
    public long count(String keywords) { // 建议返回 long 类型，防止数量过大 Integer 溢出
        StringBuilder sqlBuilder = new StringBuilder("SELECT COUNT(id) FROM t_news"); // 使用 COUNT(id) 更明确

        List<Object> params = new ArrayList<>(); // 用于存储 SQL 参数

        // ✅ 添加关键词搜索逻辑
        if (StrKit.notBlank(keywords)) {
            sqlBuilder.append(" WHERE title LIKE ? OR content LIKE ? "); // 添加 WHERE 子句
            params.add("%" + keywords + "%");        // 添加模糊匹配参数
            params.add("%" + keywords + "%");        // 添加模糊匹配参数
        }

        // 执行查询
        // Db.queryLong() 返回 long 类型，更安全
        return Db.queryLong(sqlBuilder.toString(), params.toArray());
    }

    public List<News> homeList(String type) {
        String columns = "*";
        String baseSql = "select " + columns + " from t_news where type=? order by update_time desc limit 0, 10";

        return News.dao.find(baseSql, type);
    }

    /**
     * 分页查询 News 商品列表，并支持按名称模糊搜索
     *
     * @param pageNumber 页码
     * @param pageSize 每页大小
     * @param keywords 可选参数，用于 title 或 content 字段的模糊匹配。如果为 null 或空字符串则不进行过滤。
     * @return 符合条件的 News 列表
     */
    public List<News> newsList(int pageNumber, int pageSize, String keywords) { // 增加 keywords 参数
        int offset = (pageNumber - 1) * pageSize;

        String columns = "*";
        StringBuilder sqlBuilder = new StringBuilder("select ").append(columns).append(" from t_news");

        List<Object> params = new ArrayList<>(); // 用于存储 SQL 参数

        // ✅ 添加关键词搜索逻辑
        if (StrKit.notBlank(keywords)) {
            sqlBuilder.append(" WHERE title LIKE ? OR content LIKE ? "); // 添加 WHERE 子句
            params.add("%" + keywords + "%");        // 添加模糊匹配参数
            params.add("%" + keywords + "%");        // 添加模糊匹配参数
        }

        sqlBuilder.append(" order by update_time desc limit ?, ?"); // 添加排序和分页
        params.add(offset);
        params.add(pageSize);

        // 执行查询
        // News.dao.find() 的参数：第一位是 SQL 字符串，后面是可变参数数组
        // 这里需要将 List<Object> params 转换为 Object[]
        return News.dao.find(sqlBuilder.toString(), params.toArray());
    }
}
