# -*- coding: utf-8 -*-
"""
批量文件操作测试
"""

import asyncio
from v123pan import V123Pan, FileBatchOperator


async def main():
    """测试批量文件操作"""

    # 使用 access_token 初始化客户端
    ACCESS_TOKEN = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6MTgxMTY0MzQwNywidXNlcm5hbWUiOiIxOTM2NjkxNjkxMSIsIm5pY2tuYW1lIjoi55m96bif6Z2S5Z-OIiwidiI6MCwibWFpbCI6IjE1NjQ0MzAxNDNAcXEuY29tIiwic2NvcGUiOiJ1c2VyOmJhc2UsZmlsZTphbGw6cmVhZCxmaWxlOmFsbDp3cml0ZSIsImlzT2F1dGgyTG9naW4iOnRydWUsImFwcE5hbWUiOiJDbG91ZERyaXZlMiIsImF1ZCI6IjdjMjc4YzYwZGE5ZTQzODQ4YzQ1ZmY4ZTZmYTlkYTBhIiwiZXhwIjoxNzc0OTI5MjgwLCJpc3MiOiIxMjNwYW4iLCJzdWIiOiIxODExNjQzNDA3In0.bD8yFSCarcBnWCYehLqhGUlAdiFez5imec6Xv3rAfAw"

    client = V123Pan(access_token=ACCESS_TOKEN)
    batch = FileBatchOperator(client)

    try:
        # 测试 1: 获取文件列表
        print("=" * 60)
        print("测试 1: 批量获取文件列表")
        print("=" * 60)

        files = await batch.list_files_batch(
            parent_dir_id=0,
            page_size=50,
            max_pages=2,
            progress_callback=lambda p: print(f"进度：{p}")
        )
        print(f"获取到 {len(files)} 个文件")

        if files:
            print(f"前 5 个文件:")
            for f in files[:5]:
                print(f"  - {f.get('fileName', 'N/A')} (ID: {f.get('fileId', 'N/A')})")

        # 测试 2: 批量获取文件信息（异步生成器）
        print("\n" + "=" * 60)
        print("测试 2: 批量获取文件信息（异步生成器）")
        print("=" * 60)

        test_file_ids = [f["fileId"] for f in files[:5]] if files else []

        if test_file_ids:
            print(f"准备获取文件信息：{test_file_ids}")
            async for file_info in batch.get_files_info_batch(test_file_ids):
                print(f"  - {file_info.get('fileName', 'N/A')} (大小：{file_info.get('size', 'N/A')} 字节)")
        else:
            print("没有可获取的文件，跳过")

        # 测试 3: 批量删除（如果有测试文件）
        print("\n" + "=" * 60)
        print("测试 3: 批量删除")
        print("=" * 60)

        # 先创建一些测试文件 ID（仅用于演示）
        delete_file_ids = [f["fileId"] for f in files[:3]] if files else []

        if delete_file_ids:
            print(f"准备删除文件：{delete_file_ids}")
            result = await batch.delete_batch(
                delete_file_ids,
                progress_callback=lambda p: print(f"进度：{p}")
            )
            print(f"删除结果：{result}")
        else:
            print("没有可删除的文件，跳过")

        # 测试 4: 批量移动（如果有文件）
        print("\n" + "=" * 60)
        print("测试 4: 批量移动")
        print("=" * 60)

        if len(files) > 3:
            move_file_ids = [f["fileId"] for f in files[3:6]]
            print(f"准备移动文件：{move_file_ids}")
            result = await batch.move_batch(
                move_file_ids,
                target_dir_id=0,  # 移动到根目录
                progress_callback=lambda p: print(f"进度：{p}")
            )
            print(f"移动结果：{result}")
        else:
            print("没有足够的文件可移动，跳过")

        # 测试 4: 批量重命名（如果有文件）
        print("\n" + "=" * 60)
        print("测试 4: 批量重命名")
        print("=" * 60)

        if len(files) > 6:
            rename_list = [
                (f["fileId"], f"renamed_{i}_{f.get('fileName', 'file')}")
                for i, f in enumerate(files[6:9])
            ]
            print(f"准备重命名文件：{rename_list}")
            result = await batch.rename_batch_extended(
                rename_list,
                progress_callback=lambda p: print(f"进度：{p}")
            )
            print(f"重命名结果：{result}")
        else:
            print("没有足够的文件可重命名，跳过")

        print("\n" + "=" * 60)
        print("所有测试完成!")
        print("=" * 60)

    except Exception as e:
        print(f"测试失败：{e}")
        import traceback
        traceback.print_exc()

    finally:
        await client.close()


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