"""
数据库修复脚本：修复 Collection 表的唯一约束
运行方式：python fix_collection_constraint.py
"""

import os
from app import create_app
from models import db

def fix_collection_constraint():
    """修复 Collection 表的唯一约束"""
    app = create_app(os.getenv('FLASK_ENV', 'development'))

    with app.app_context():
        print("开始修复 Collection 表的唯一约束...")

        try:
            # 删除旧的唯一约束
            print("1. 删除旧的唯一约束 unique_user_site_folder...")
            db.engine.execute(
                "ALTER TABLE collections DROP INDEX unique_user_site_folder"
            )
            print("   ✓ 旧约束已删除")

            # 添加新的唯一约束
            print("2. 添加新的唯一约束 unique_user_site...")
            db.engine.execute(
                "ALTER TABLE collections ADD CONSTRAINT unique_user_site UNIQUE (user_id, site_id)"
            )
            print("   ✓ 新约束已添加")

            print("\n✅ 修复完成！")
            print("\n说明：")
            print("- 旧约束：(user_id, site_id, folder_id) - 允许重复收藏到未分类")
            print("- 新约束：(user_id, site_id) - 每个用户只能收藏一次同一个网站")

        except Exception as e:
            print(f"\n❌ 修复失败: {str(e)}")
            print("\n可能的原因：")
            print("1. 约束名称不匹配（MySQL/SQLite 差异）")
            print("2. 数据库中已存在重复数据")
            print("3. 数据库权限不足")

            import traceback
            traceback.print_exc()

if __name__ == '__main__':
    fix_collection_constraint()
