import sys
from pathlib import Path
sys.path.insert(0, str(Path(__file__).parents[4] / 'base_platform'))
from sqlalchemy import text
from sqlalchemy.orm import Session
from app.models.knowledge_base import TagCategory, KnowledgeTag

def seed_tag_categories(db: Session, tenant_id: int):
    db.execute(text(f'SET search_path TO tenant_{tenant_id}, public'))
    categories = [{'code': 'tax_type', 'name': '税种分类', 'description': '按税种对文档进行分类', 'part_number': 1, 'sort_order': 1, 'icon': '💰', 'color': '#1890ff'}, {'code': 'industry', 'name': '行业分类', 'description': '按行业对文档进行分类', 'part_number': 1, 'sort_order': 2, 'icon': '🏢', 'color': '#52c41a'}, {'code': 'knowledge_asset', 'name': '知识资产类型', 'description': '按知识资产类型分类', 'part_number': 2, 'sort_order': 1, 'icon': '📚', 'color': '#722ed1'}, {'code': 'validity', 'name': '有效性', 'description': '文档的有效性状态', 'part_number': 2, 'sort_order': 2, 'icon': '✓', 'color': '#13c2c2'}, {'code': 'regional', 'name': '地域性', 'description': '文档适用的地域范围', 'part_number': 2, 'sort_order': 3, 'icon': '🌍', 'color': '#fa8c16'}, {'code': 'risk_model', 'name': '风险模型', 'description': '税务风险等级分类', 'part_number': 3, 'sort_order': 1, 'icon': '⚠️', 'color': '#f5222d'}, {'code': 'optimization', 'name': '优化方向', 'description': '税务优化策略方向', 'part_number': 3, 'sort_order': 2, 'icon': '📈', 'color': '#52c41a'}, {'code': 'scenario', 'name': '应用场景', 'description': '实际应用场景分类', 'part_number': 3, 'sort_order': 3, 'icon': '🎯', 'color': '#1890ff'}]
    created = {}
    for cat_data in categories:
        existing = db.query(TagCategory).filter_by(code=cat_data['code']).first()
        if not existing:
            category = TagCategory(**cat_data, tenant_id=tenant_id)
            db.add(category)
            db.flush()
            created[cat_data['code']] = category
            print(f"  ✓ Created category: {cat_data['name']}")
        else:
            created[cat_data['code']] = existing
            print(f"  - Category exists: {cat_data['name']}")
    return created

def create_tag_recursive(db: Session, tag_data: dict, category_id: int, tenant_id: int, parent_id: int=None):
    existing = db.query(KnowledgeTag).filter_by(tag_code=tag_data['tag_code']).first()
    if existing:
        tag = existing
        if tag.parent_id != parent_id:
            tag.parent_id = parent_id
    else:
        tag = KnowledgeTag(name=tag_data['name'], description=tag_data.get('description'), tag_code=tag_data['tag_code'], tag_category_id=category_id, parent_id=parent_id, is_predefined=True, is_system=True, keywords=tag_data.get('keywords'), search_weight=tag_data.get('search_weight', 1.0), icon=tag_data.get('icon', '🏷️'), color=tag_data.get('color', '#6366f1'), tenant_id=tenant_id)
        db.add(tag)
        db.flush()
    for child_data in tag_data.get('children', []):
        create_tag_recursive(db, child_data, category_id, tenant_id, tag.id)
    return tag