#!/usr/bin/env python3
"""
测试采购清单管理的付款时间筛选功能
"""

import asyncio
import sys
import os
from datetime import datetime, timedelta

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

from app.core.database import get_db
from app.services.procurement_list_service import ProcurementListService


async def test_payment_time_filter():
    """测试付款时间筛选功能"""
    
    print("=== 测试采购清单管理付款时间筛选功能 ===\n")
    
    service = ProcurementListService()
    
    async for db in get_db():
        try:
            # 1. 测试无时间筛选 - 获取所有采购清单
            print("1. 测试无时间筛选 - 获取所有采购清单")
            all_result = await service.get_procurement_list(db)
            print(f"   总SKU数量: {len(all_result['items'])}")
            print(f"   总页数: {all_result['pagination']['pages']}")
            print(f"   总记录数: {all_result['pagination']['total']}")
            
            if all_result['items']:
                # 显示前3个SKU的基本信息
                print("   前3个SKU示例:")
                for i, item in enumerate(all_result['items'][:3]):
                    print(f"     {i+1}. {item['线上宝贝名称'][:50]}... - 需求数量: {item['total_quantity']}")
            print()
            
            # 2. 测试今日付款的订单
            print("2. 测试今日付款的订单")
            today = datetime.now().strftime('%Y-%m-%d 00:00:00')
            today_result = await service.get_procurement_list(
                db, 
                payment_time_from=today
            )
            print(f"   今日付款SKU数量: {len(today_result['items'])}")
            print(f"   筛选条件: 付款时间 >= {today}")
            print()
            
            # 3. 测试最近3天付款的订单
            print("3. 测试最近3天付款的订单")
            three_days_ago = (datetime.now() - timedelta(days=3)).strftime('%Y-%m-%d 00:00:00')
            recent_result = await service.get_procurement_list(
                db, 
                payment_time_from=three_days_ago
            )
            print(f"   最近3天付款SKU数量: {len(recent_result['items'])}")
            print(f"   筛选条件: 付款时间 >= {three_days_ago}")
            print()
            
            # 4. 测试本周付款的订单
            print("4. 测试本周付款的订单")
            # 计算本周一的日期
            now = datetime.now()
            days_since_monday = now.weekday()
            monday = now - timedelta(days=days_since_monday)
            week_start = monday.strftime('%Y-%m-%d 00:00:00')
            
            week_result = await service.get_procurement_list(
                db, 
                payment_time_from=week_start
            )
            print(f"   本周付款SKU数量: {len(week_result['items'])}")
            print(f"   筛选条件: 付款时间 >= {week_start}")
            print()
            
            # 5. 测试组合筛选：付款时间 + 采购方式
            print("5. 测试组合筛选：最近3天 + NY采购方式")
            combined_result = await service.get_procurement_list(
                db,
                payment_time_from=three_days_ago,
                procurement_method='NY'
            )
            print(f"   最近3天NY采购方式SKU数量: {len(combined_result['items'])}")
            print(f"   筛选条件: 付款时间 >= {three_days_ago} AND 采购方式 = NY")
            
            if combined_result['items']:
                print("   符合条件的SKU示例:")
                for i, item in enumerate(combined_result['items'][:2]):
                    print(f"     {i+1}. {item['线上宝贝名称'][:40]}... - 采购方式: {item['procurement_method']} - 数量: {item['total_quantity']}")
            print()
            
            # 6. 测试历史时间筛选（一个月前）
            print("6. 测试历史时间筛选（一个月前的订单）")
            one_month_ago = (datetime.now() - timedelta(days=30)).strftime('%Y-%m-%d 00:00:00')
            old_result = await service.get_procurement_list(
                db, 
                payment_time_from=one_month_ago
            )
            print(f"   一个月内付款SKU数量: {len(old_result['items'])}")
            print(f"   筛选条件: 付款时间 >= {one_month_ago}")
            print()
            
            # 7. 验证数据的逻辑关系
            print("7. 验证筛选逻辑的正确性")
            print(f"   全部SKU数量: {len(all_result['items'])}")
            print(f"   今日SKU数量: {len(today_result['items'])}")
            print(f"   最近3天SKU数量: {len(recent_result['items'])}")
            print(f"   本周SKU数量: {len(week_result['items'])}")
            print(f"   一个月内SKU数量: {len(old_result['items'])}")
            
            # 检查逻辑关系
            if len(today_result['items']) <= len(recent_result['items']):
                print("   ✓ 今日数量 <= 最近3天数量 (逻辑正确)")
            else:
                print("   ✗ 今日数量 > 最近3天数量 (逻辑错误)")
                
            if len(recent_result['items']) <= len(old_result['items']):
                print("   ✓ 最近3天数量 <= 一个月内数量 (逻辑正确)")
            else:
                print("   ✗ 最近3天数量 > 一个月内数量 (逻辑错误)")
            
            print("\n=== 付款时间筛选功能测试完成 ===")
            
        except Exception as e:
            print(f"测试过程中发生错误: {e}")
            import traceback
            traceback.print_exc()
        
        break


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