#!/usr/bin/env python3
"""
生成待采购订单脚本
从标准化订单表中筛选符合条件的订单，生成独立的待采购订单表
"""

import asyncio
import logging
from datetime import datetime
from sqlalchemy.ext.asyncio import create_async_engine, async_sessionmaker

from app.core.database import init_db
from app.services.procurement_order_service_v2 import ProcurementOrderServiceV2

# 配置日志
logging.basicConfig(
    level=logging.INFO,
    format='%(asctime)s - %(name)s - %(levelname)s - %(message)s'
)
logger = logging.getLogger(__name__)


async def main():
    """主函数"""
    print("=" * 70)
    print("📋 生成待采购订单系统")
    print("=" * 70)
    
    try:
        # 初始化数据库
        await init_db()
        logger.info("数据库初始化完成")
        
        # 创建数据库连接
        engine = create_async_engine('sqlite+aiosqlite:///./ordersys.db')
        async_session = async_sessionmaker(engine, expire_on_commit=False)
        
        # 创建服务实例
        service = ProcurementOrderServiceV2()
        
        async with async_session() as session:
            # 生成待采购订单
            result = await service.generate_procurement_orders_from_normalized(session)
            
            print("\n" + "=" * 70)
            print("✅ 待采购订单生成完成!")
            print("=" * 70)
            
            print(f"\n📊 生成结果:")
            print(f"   总订单数: {result['total_created']}")
            
            print(f"\n📈 采购方式分布:")
            method_names = {
                'GN': 'GN(国内现货)',
                'MC': 'MC(库存)', 
                'AT': 'AT(Atelier)',
                'AP': 'AP(昌昌)',
                'LA': 'LA(洛杉矶)',
                'SS': 'SS(Saks)',
                'NY': 'NY(纽约默认)'
            }
            
            total_orders = result['total_created']
            for method, count in sorted(result['method_distribution'].items(), 
                                      key=lambda x: x[1], reverse=True):
                method_name = method_names.get(method, method)
                percentage = (count / total_orders * 100) if total_orders > 0 else 0
                print(f"   {method_name}: {count} 订单 ({percentage:.1f}%)")
            
            print(f"\n💡 业务流程说明:")
            print(f"   1. 标准化订单完成后自动生成待采购订单")
            print(f"   2. 待采购订单独立管理，支持状态跟踪")
            print(f"   3. 基于待采购订单生成采购清单和采购计划")
            print(f"   4. 支持采购方式筛选、优先级管理等功能")
            
            print(f"\n📍 前端访问地址:")
            print(f"   待采购订单列表: http://localhost:3000/procurement/orders")
            print(f"   采购管理面板: http://localhost:3000/procurement/pending")
            
            print("=" * 70)
            
        await engine.dispose()
        
    except Exception as e:
        logger.error(f"生成待采购订单失败: {e}")
        print(f"\n❌ 错误: {e}")
        raise


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