#!/usr/bin/env python3
"""
修复特定的Pale Pink解析问题
"""

import asyncio
import sys
import os
from datetime import datetime

# 添加项目根目录到 Python 路径
sys.path.append(os.path.dirname(os.path.abspath(__file__)))

from app.core.database import get_db
from app.utils.text_parser import AttributeExtractor
from app.utils.color_processor import process_color_attribute
from sqlalchemy import text


async def fix_pale_pink_specific():
    """修复特定的Pale Pink解析问题"""
    print("=== 修复Pale Pink特定问题 ===\n")
    
    extractor = AttributeExtractor()
    
    async for db in get_db():
        try:
            # 查找特定订单
            result = await db.execute(text("""
                SELECT id, 原始订单编号, 线上销售属性, 颜色, 尺寸
                FROM order_items_norm 
                WHERE 原始订单编号 = '2886781333142476881'
            """))
            
            order = result.fetchone()
            if not order:
                print("未找到指定订单")
                return
            
            print(f"找到订单: {order.原始订单编号}")
            print(f"销售属性: {order.线上销售属性}")
            print(f"当前颜色: {order.颜色}")
            print(f"当前尺寸: {order.尺寸}")
            
            # 使用最新逻辑重新解析
            new_color = extractor._extract_color(order.线上销售属性)
            new_size = extractor._extract_size(order.线上销售属性)
            
            print(f"\n重新解析结果:")
            print(f"新颜色: {new_color}")
            print(f"新尺寸: {new_size}")
            
            # 应用颜色处理
            if new_color:
                processed_color = process_color_attribute(new_color)
                final_color = processed_color or new_color
            else:
                final_color = order.颜色
            
            final_size = new_size or order.尺寸
            
            print(f"\n最终结果:")
            print(f"最终颜色: {final_color}")
            print(f"最终尺寸: {final_size}")
            
            # 检查是否需要更新
            if final_color != order.颜色 or final_size != order.尺寸:
                print(f"\n需要更新:")
                if final_color != order.颜色:
                    print(f"  颜色: {order.颜色} -> {final_color}")
                if final_size != order.尺寸:
                    print(f"  尺寸: {order.尺寸} -> {final_size}")
                
                # 执行更新
                await db.execute(text("""
                    UPDATE order_items_norm 
                    SET 颜色 = :new_color, 尺寸 = :new_size, updated_at = :now
                    WHERE id = :order_id
                """), {
                    'new_color': final_color,
                    'new_size': final_size,
                    'order_id': order.id,
                    'now': datetime.now()
                })
                
                await db.commit()
                print(f"\n✓ 已更新标准化订单")
                
                # 同步到待采购订单
                proc_result = await db.execute(text("""
                    UPDATE procurement_orders 
                    SET 颜色 = :new_color, 尺寸 = :new_size, 更新时间 = :now
                    WHERE original_order_id = :order_id
                """), {
                    'new_color': final_color,
                    'new_size': final_size,
                    'order_id': order.id,
                    'now': datetime.now()
                })
                
                await db.commit()
                
                if proc_result.rowcount > 0:
                    print(f"✓ 已同步到待采购订单")
                else:
                    print("⚠ 未找到对应的待采购订单")
                    
            else:
                print(f"\n无需更新")
                
        except Exception as e:
            await db.rollback()
            print(f"修复过程中发生错误: {e}")
            import traceback
            traceback.print_exc()
        
        break


async def main():
    """主函数"""
    print("Pale Pink特定问题修复工具")
    print("=" * 60)
    await fix_pale_pink_specific()


if __name__ == "__main__":
    asyncio.run(main())