"""
newsRedo — 手动重新执行新闻 AI 分割流程。

用法：
    python newsRedo.py                  # 默认当天日期
    python newsRedo.py 20250601         # yyyymmdd 格式
    python newsRedo.py 2025-06-01       # yyyy-mm-dd 格式

流程：
    1. 检查 xwlb_daily_ext 是否已有 >5 条 → 已处理过，正常跳过
    2. 检查 xwlb_daily 是否有当天记录 → 无记录则先跑 getVideo5 全流程
    3. 有记录但未处理 → 直接执行 news_to_db() AI 分割
"""
import sys
import re
import logging
from datetime import datetime
from mysqlHandle import MySQLDB
from newsProcess import news_to_db
from getVideo5 import process_videos

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


def _parse_date(date_str):
    """解析日期，返回 (yyyymmdd_str, yyyy_mm_dd_str)，或报错退出"""
    if not date_str:
        today = datetime.now()
        d8 = today.strftime('%Y%m%d')
        d10 = today.strftime('%Y-%m-%d')
        logger.info(f"未指定日期，使用当天: {d10}")
        return d8, d10

    if re.match(r'^\d{4}-\d{2}-\d{2}$', date_str):
        try:
            datetime.strptime(date_str, '%Y-%m-%d')
        except ValueError:
            print(f"无效日期: {date_str}")
            sys.exit(1)
        return date_str.replace('-', ''), date_str

    if re.match(r'^\d{8}$', date_str):
        try:
            datetime.strptime(date_str, '%Y%m%d')
        except ValueError:
            print(f"无效日期: {date_str}")
            sys.exit(1)
        return date_str, f"{date_str[:4]}-{date_str[4:6]}-{date_str[6:8]}"

    print("日期格式错误，请使用 yyyymmdd 或 yyyy-mm-dd 格式")
    sys.exit(1)


def main():
    date_str = sys.argv[1] if len(sys.argv) > 1 else None
    date_d8, date_d10 = _parse_date(date_str)

    db = MySQLDB()

    # 1. 检查 xwlb_daily_ext 是否已处理过
    try:
        ext_count = db.query_data(
            table="xwlb_daily_ext",
            columns="COUNT(*) as count",
            where="news_date = %s",
            params=(date_d10,)
        )
        if ext_count and ext_count[0]['count'] > 5:
            logger.info(f"日期 {date_d10} 已有 {ext_count[0]['count']} 条精编记录，无需重新处理。")
            return
    except Exception as e:
        logger.error(f"查询 xwlb_daily_ext 失败: {e}")
    finally:
        db.close()

    db = MySQLDB()

    # 2. 检查 xwlb_daily 是否有当天数据
    try:
        daily_count = db.query_data(
            table="xwlb_daily",
            columns="COUNT(*) as count",
            where="news_days = %s",
            params=(date_d10,)
        )
        has_daily = daily_count and daily_count[0]['count'] > 0
    except Exception as e:
        logger.error(f"查询 xwlb_daily 失败: {e}")
        has_daily = False
    finally:
        db.close()

    # 3. 分支处理
    if has_daily:
        logger.info(f"日期 {date_d10} 在 xwlb_daily 中有记录，直接执行 AI 分割。")
        try:
            news_to_db(date_d10)
        except Exception as e:
            logger.error(f"news_to_db 执行出错: {e}")
            sys.exit(1)
    else:
        logger.info(f"日期 {date_d10} 在 xwlb_daily 中无记录，重新执行视频下载全流程。")
        try:
            process_videos(date_d8, date_d8)
        except Exception as e:
            logger.error(f"process_videos 执行出错: {e}")
            sys.exit(1)


if __name__ == "__main__":
    main()
