"""
xwlb_daily 表结构如下：
+--------------+---------+------+-----+---------+----------------+
| Field        | Type    | Null | Key | Default | Extra          |
+--------------+---------+------+-----+---------+----------------+
| nid          | int(11) | NO   | PRI | NULL    | auto_increment |
| news_days    | date    | NO   |     | NULL    |                |
| daily_sub_id | int(11) | NO   |     | NULL    |                |
| news_raw     | text    | NO   |     | NULL    |                |
| news_improve | text    | NO   |     | NULL    |                |
| news_title   | text    | NO   |     | NULL    |                |
+--------------+---------+------+-----+---------+----------------+
xwlb_daily_ext 表结构如下：
+--------------+--------------+------+-----+---------+----------------+
| Field        | Type         | Null | Key | Default | Extra          |
+--------------+--------------+------+-----+---------+----------------+
| extid        | int(11)      | NO   | PRI | NULL    | auto_increment |
| news_date    | date         | NO   |     | NULL    |                |
| sub_id       | tinyint(4)   | NO   |     | NULL    |                |
| news_title   | varchar(256) | NO   |     | NULL    |                |
| news_content | text         | NO   |     | NULL    |                |
+--------------+--------------+------+-----+---------+----------------+

获取给定日期的所有news_improve字段内容，以daily_sub_id 顺序拼接为一个字符串返回。
调用mysqlHandler中的方法执行SQL查询。
"""
from mysqlHandle import MySQLDB
from deepseek import deepseek_text
import json
import logging

logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s')
logger = logging.getLogger(__name__)

def get_news_improve_by_date(target_date):
    """
    获取指定日期的所有news_improve内容，按daily_sub_id顺序拼接

    Args:
        target_date: 目标日期，格式为'YYYY-MM-DD'

    Returns:
        str: 拼接后的字符串
    """
    try:
        # 创建数据库连接对象
        db = MySQLDB()
        # 查询目标日期在xwlb_daily_ext表中的记录数量
        count_result = db.query_data(
            table="xwlb_daily_ext",
            columns="COUNT(*) as count",
            where="news_date = %s",
            params=(target_date,)
        )
        # 如果记录数量存在且大于5条，则返回空字符串
        if count_result and count_result[0]['count'] > 5:
            return None
        # 重新创建数据库连接对象，因为每次查询都会关闭连接
        db = MySQLDB()
        # 查询目标日期在xwlb_daily表中的news_improve字段，按daily_sub_id升序排列
        result = db.query_data(
            table="xwlb_daily",
            columns="news_improve",
            where="news_days = %s order by daily_sub_id ASC",
            params=(target_date,))
        # 如果查询结果不为空
        if result:
            # 将每条记录的news_improve字段用换行符连接成字符串
            combined_content = '\n'.join([row['news_improve'] for row in result])
            # 返回拼接后的字符串
            return combined_content
        # 查询结果为空时返回空字符串
        return None
    except Exception as e:
        #print(f"查询失败: {e}")
        logger.error(f"查询失败: {e}")
        return None

def news_to_db(target_date):
    result = get_news_improve_by_date(target_date)
    if result is None:
        logger.warning(f"日期 {target_date} 没有新闻内容或者已经存在处理后的记录。跳过")
        return None
    logger.info(f"日期 {target_date} 的新闻内容长度：{len(result)} 字符")

    prompt= "###请根据下面新闻内容的文本逻辑 \n - 帮我分割成各个独立的新闻内容（注意：不要修改新闻本身，仅分割文本），并给每个新闻总结一个标题; \n - 如果遇到'国内快讯'、'国际快讯'或'联播快讯'，也请根据每个条快讯分割为一个新闻以及新闻标题； \n - 返回json格式。json格式包含：news_id，news_title，news_content; news_id从1开始递增。"
    try:
        response = deepseek_text(result, prompt)
        data = json.loads(response)
        # DeepSeek json_object 模式返回的是 dict（如 {"news": [...]}），
        # 普通模式返回的是纯数组 [...]，这里做自适应提取
        if isinstance(data, dict):
            # 从 dict 中提取列表：找第一个 list 类型的 value
            news_list = None
            for v in data.values():
                if isinstance(v, list):
                    news_list = v
                    break
            if news_list is None:
                # 所有 value 都不是 list，可能是 {"1": {...}, "2": {...}} 格式
                news_list = list(data.values())
        elif isinstance(data, list):
            news_list = data
        else:
            raise ValueError(f"不支持 DeepSeek 响应格式: {type(data)}")

        db = MySQLDB()
        for news in news_list:
            db.insert_data(
                table="xwlb_daily_ext",
                data={
                    "news_date": target_date,
                    "sub_id": news["news_id"],
                    "news_title": news["news_title"][:256],  # 确保不超过varchar(256)限制
                    "news_content": news["news_content"]
                }
            )
        logger.info(f"成功插入 {len(news_list)} 条新闻到数据库")
    except json.JSONDecodeError as e:
        logger.error(f"JSON解析失败: {e}")
        logger.error(f"DeepSeek API返回内容: {response}")
    except Exception as e:
        logger.error(f"插入数据库失败: {e}")
    #print(f"DeepSeek API返回结果：{response}")

if __name__ == "__main__":
    import sys
    from datetime import datetime
    #提供日期参数，格式：YYYY-MM-DD
  
    target_date = datetime.now().strftime('%Y-%m-%d')
    news_to_db(target_date)
