import json
import os
from datetime import datetime
from pathlib import Path
from .database import SessionLocal, init_db
from .models import Topic, User
import bcrypt

# 计算项目根目录（backend/app/initial_data.py -> 上升3层到 yu-zhi-ran）
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"

# 从环境变量读取管理员配置
DEFAULT_ADMIN_USERNAME = os.getenv('DEFAULT_ADMIN_USERNAME', 'admin')
DEFAULT_ADMIN_PASSWORD = os.getenv('DEFAULT_ADMIN_PASSWORD', 'admin123')

def import_initial_data():
    db = SessionLocal()
    try:
        # 1. 导入选题数据
        if db.query(Topic).count() == 0:
            if __import__('os').path.exists(TOPICS_FILE):
                topics = json.loads(open(TOPICS_FILE, encoding='utf-8').read())
                # 去重：保留每个 ID 最后出现的记录
                seen = {}
                for t in topics:
                    seen[t['id']] = t
                unique_topics = list(seen.values())
                for t in unique_topics:
                    topic = Topic(
                        id=t['id'],
                        title=t['title'],
                        field=t['field'],
                        format=t.get('format'),
                        core_concept=t.get('core_concept'),
                        audience_pain=t.get('audience_pain'),
                        unique_angle=t.get('unique_angle'),
                        priority=t.get('priority'),
                        priority_score=t.get('priority_score', 0),
                        total_score=t.get('total_score'),
                        status=t.get('status', 'pending'),
                        cases=t.get('cases', []),
                        source_file=t.get('source_file'),
                        ready_at=datetime.strptime(t['ready_at'], '%Y-%m-%d').date() if t.get('ready_at') else None,
                        published_at=datetime.strptime(t['published_at'], '%Y-%m-%d').date() if t.get('published_at') else None,
                        compliance_score=t.get('compliance_score'),
                        platform_urls=t.get('platform_urls', {})
                    )
                    db.add(topic)
                db.commit()
                print(f"✅ 导入 {len(unique_topics)} 个选题到数据库（去重后）")
            else:
                print(f"⚠️ 选题文件不存在: {TOPICS_FILE}")
        else:
            print("数据库已有选题数据，跳过导入")

        # 2. 创建默认管理员用户（bcrypt 哈希）
        admin_exists = db.query(User).filter(User.username == DEFAULT_ADMIN_USERNAME).first()
        if not admin_exists:
            hashed = bcrypt.hashpw(DEFAULT_ADMIN_PASSWORD.encode('utf-8'), bcrypt.gensalt())
            admin = User(
                username=DEFAULT_ADMIN_USERNAME,
                password_hash=hashed.decode('utf-8'),
                role="admin"
            )
            db.add(admin)
            db.commit()
            print(f"✅ 创建默认管理员: {DEFAULT_ADMIN_USERNAME}")
        else:
            # 如果管理员已存在但密码为空，更新为默认密码的哈希
            if not admin_exists.password_hash:
                hashed = bcrypt.hashpw(DEFAULT_ADMIN_PASSWORD.encode('utf-8'), bcrypt.gensalt())
                admin_exists.password_hash = hashed.decode('utf-8')
                db.commit()
                print(f"✅ 更新管理员密码")
            print(f"管理员已存在: {DEFAULT_ADMIN_USERNAME}")
    except Exception as e:
        print(f"初始化失败: {e}")
        db.rollback()
    finally:
        db.close()

if __name__ == "__main__":
    init_db()
    import_initial_data()
