"""基础使用示例"""

import asyncio
from novnc_client import NoVNCClient


async def basic_example():
    """基础使用示例"""
    print("=== noVNC 客户端基础使用示例 ===\n")

    # 创建客户端并连接
    async with NoVNCClient("localhost", 6080) as client:
        print(f"连接成功！屏幕尺寸: {client.screen_size}")

        # 1. 截图
        print("\n1. 截图功能")
        await client.take_screenshot("example_screenshot.png")
        print("截图已保存到 example_screenshot.png")

        # 2. 鼠标操作
        print("\n2. 鼠标操作")
        await client.mouse_move(100, 100)
        print("鼠标移动到 (100, 100)")

        await client.mouse_click(200, 200, "left")
        print("在 (200, 200) 左键点击")

        await client.mouse_scroll(300, 300, "up", steps=3)
        print("在 (300, 300) 向上滚动 3 步")

        # 3. 键盘输入
        print("\n3. 键盘输入")
        await client.type_text("Hello, noVNC!", delay=0.05)
        print("输入文本: Hello, noVNC!")

        await client.key_tap("enter")
        print("按下回车键")

        # 4. 组合键
        print("\n4. 组合键操作")
        await client.key_combination("ctrl", "a")
        print("按下 Ctrl+A")

        await client.key_combination("ctrl", "c")
        print("按下 Ctrl+C")

        # 5. 特殊按键
        print("\n5. 特殊按键")
        await client.key_tap("f1")
        print("按下 F1")

        await client.key_tap("escape")
        print("按下 Esc")


async def advanced_example():
    """高级使用示例"""
    print("\n=== 高级使用示例 ===\n")

    client = NoVNCClient("localhost", 6080, timeout=15.0)

    try:
        await client.connect()
        print("手动连接成功")

        # 获取服务器信息
        info = client.server_info
        if info:
            print(f"服务器: {info.server_name}")
            print(f"分辨率: {info.width}x{info.height}")
            print(f"像素格式: {info.pixel_format.bits_per_pixel} 位")

        # 模拟打开记事本并编辑
        print("\n模拟操作记事本:")

        # 打开运行对话框
        await client.key_combination("win", "r")
        await asyncio.sleep(0.5)

        # 输入 notepad
        await client.type_text("notepad")
        await client.key_tap("enter")
        await asyncio.sleep(1)

        # 输入一些文本
        sample_text = """这是通过 noVNC 客户端输入的文本
支持中文输入
支持多行文本
支持特殊字符: @#$%^&*()
"""
        await client.type_text(sample_text, delay=0.02)

        # 选择所有文本
        await client.key_combination("ctrl", "a")
        await asyncio.sleep(0.2)

        # 复制文本
        await client.key_combination("ctrl", "c")
        await asyncio.sleep(0.2)

        # 移动到末尾并粘贴
        await client.key_tap("end")
        await client.key_tap("enter")
        await client.key_combination("ctrl", "v")

        print("记事本操作完成!")

    finally:
        await client.disconnect()
        print("连接已断开")


async def screenshot_example():
    """截图示例"""
    print("\n=== 截图功能示例 ===\n")

    async with NoVNCClient("localhost", 6080) as client:
        # 方法1: 保存到文件
        await client.take_screenshot("desktop_screenshot.png")
        print("方法1: 截图保存到文件")

        # 方法2: 获取 PIL 图像对象
        image = await client.take_screenshot()
        print(f"方法2: 获取 PIL 图像对象，尺寸: {image.width}x{image.height}")
        print(f"图像模式: {image.mode}")

        # 可以进一步处理图像对象
        image.save("desktop_raw.png")
        print("PIL 图像对象已保存")

        # 如果需要字节数据，可以转换
        from io import BytesIO

        buffer = BytesIO()
        image.save(buffer, format="PNG")
        image_bytes = buffer.getvalue()
        print(f"转换为字节数据，大小: {len(image_bytes)} 字节")


if __name__ == "__main__":
    print("请确保 noVNC 服务正在 localhost:6080 运行\n")

    # 运行所有示例
    asyncio.run(basic_example())
    asyncio.run(advanced_example())
    asyncio.run(screenshot_example())

    print("\n=== 所有示例运行完成 ===")
