import json
from datetime import datetime, date
from pathlib import Path
from sqlalchemy.orm import Session
from ..database import SessionLocal
from ..models import Topic
import os

# 计算项目根目录（从本文件位置上升4层）
PROJECT_ROOT = Path(__file__).resolve().parents[1]
if os.getenv('PROJECT_ROOT'):
    PROJECT_ROOT = Path(os.getenv('PROJECT_ROOT'))
TOPICS_FILE = PROJECT_ROOT / "automation" / "data" / "sustainability_topics.json"

def sync_topic_to_db(topic_id: str, db: Session = None) -> Topic:
    """注意：此函数原用于将JSON单个选题同步到数据库。现已不需要，保留用于兼容。当前方向相反（DB为主），此处仅从数据库导出到JSON（如果需要）"""
    # 为了不破坏旧调用，我们改为从数据库读取并写入 JSON 文件（单条更新）
    close_db = False
    if db is None:
        db = SessionLocal()
        close_db = True
    try:
        topic = db.query(Topic).filter(Topic.id == topic_id).first()
        if not topic:
            raise ValueError(f"Topic {topic_id} not found in DB")
        # 写入 JSON 文件（作为备份）
        try:
            if TOPICS_FILE.exists():
                with open(TOPICS_FILE, 'r', encoding='utf-8') as f:
                    topics = json.load(f)
            else:
                topics = []
            # 转为字典
            tdict = {
                'id': topic.id,
                'title': topic.title,
                'field': topic.field,
                'format': topic.format,
                'core_concept': topic.core_concept,
                'audience_pain': topic.audience_pain,
                'unique_angle': topic.unique_angle,
                'priority': topic.priority,
                'priority_score': topic.priority_score,
                'total_score': topic.total_score,
                'status': topic.status,
                'cases': topic.cases or [],
                'source_file': topic.source_file,
                'created_at': topic.created_at.isoformat() if topic.created_at else None,
                'updated_at': topic.updated_at.isoformat() if topic.updated_at else None,
                'ready_at': topic.ready_at.isoformat() if topic.ready_at else None,
                'published_at': topic.published_at.isoformat() if topic.published_at else None,
                'compliance_score': topic.compliance_score,
                'platform_urls': topic.platform_urls or {}
            }
            # 更新或追加
            found = False
            for i, t in enumerate(topics):
                if t['id'] == topic_id:
                    topics[i] = tdict
                    found = True
                    break
            if not found:
                topics.append(tdict)
            with open(TOPICS_FILE, 'w', encoding='utf-8') as f:
                json.dump(topics, f, ensure_ascii=False, indent=2)
        except Exception as e:
            print(f"[Warning] JSON backup failed: {e}")
        return topic
    finally:
        if close_db:
            db.close()

def sync_all_topics():
    """导出所有选题到 JSON 文件（用于备份或兼容）"""
    db = SessionLocal()
    try:
        topics = db.query(Topic).order_by(Topic.created_at).all()
        topic_list = []
        for t in topics:
            tdict = {
                'id': t.id,
                'title': t.title,
                'field': t.field,
                'format': t.format,
                'core_concept': t.core_concept,
                'audience_pain': t.audience_pain,
                'unique_angle': t.unique_angle,
                'priority': t.priority,
                'priority_score': t.priority_score,
                'total_score': t.total_score,
                'status': t.status,
                'cases': t.cases or [],
                'source_file': t.source_file,
                'created_at': t.created_at.isoformat() if t.created_at else None,
                'updated_at': t.updated_at.isoformat() if t.updated_at else None,
                'ready_at': t.ready_at.isoformat() if t.ready_at else None,
                'published_at': t.published_at.isoformat() if t.published_at else None,
                'compliance_score': t.compliance_score,
                'platform_urls': t.platform_urls or {}
            }
            topic_list.append(tdict)
        TOPICS_FILE.parent.mkdir(parents=True, exist_ok=True)
        with open(TOPICS_FILE, 'w', encoding='utf-8') as f:
            json.dump(topic_list, f, ensure_ascii=False, indent=2)
        print(f"✅ 导出 {len(topic_list)} 个选题到 JSON (兼容模式)")
    finally:
        db.close()

if __name__ == "__main__":
    sync_all_topics()
