#!/usr/bin/env python3
"""鼠标位置功能示例"""

import asyncio
from novnc_client import NoVNCClient


async def main():
    """演示鼠标位置功能的使用"""

    # 创建客户端
    client = NoVNCClient("localhost", 6080)

    try:
        # 连接到服务器
        await client.connect()
        print(f"已连接到服务器，屏幕尺寸: {client.screen_size}")

        # 获取初始鼠标位置（连接后会初始化为屏幕中心）
        initial_pos = client.mouse_position
        print(f"初始鼠标位置: {initial_pos}")

        # 使用属性方式获取鼠标位置
        pos_property = client.mouse_position
        print(f"鼠标位置（属性方式）: {pos_property}")

        # 移动鼠标到不同位置
        positions = [
            (100, 100),  # 左上角
            (500, 300),  # 中央
            (800, 600),  # 右下角
        ]

        for x, y in positions:
            print(f"\n移动鼠标到 ({x}, {y})")
            await client.mouse_move(x, y)

            # 验证位置是否更新
            current_pos = client.mouse_position
            print(f"当前鼠标位置: {current_pos}")

            await asyncio.sleep(0.5)  # 短暂延迟

        # 点击操作也会更新位置
        click_pos = (200, 200)
        print(f"\n点击位置 {click_pos}")
        await client.mouse_click(click_pos[0], click_pos[1])
        print(f"点击后鼠标位置: {client.mouse_position}")

        # 滚轮操作也会更新位置
        scroll_pos = (300, 400)
        print(f"\n在位置 {scroll_pos} 滚动")
        await client.mouse_scroll(scroll_pos[0], scroll_pos[1], "up", 3)
        print(f"滚动后鼠标位置: {client.mouse_position}")

        # 演示复杂的鼠标操作序列
        print("\n演示复杂的鼠标操作序列:")

        # 绘制一个简单的矩形
        rect_coords = [
            (100, 100),  # 左上角
            (300, 100),  # 右上角
            (300, 200),  # 右下角
            (100, 200),  # 左下角
            (100, 100),  # 回到起点
        ]

        for i, (x, y) in enumerate(rect_coords):
            if i == 0:
                # 第一个点：移动到起始位置
                await client.mouse_move(x, y)
                print(f"移动到起始位置: {client.mouse_position}")
            else:
                # 后续点：点击（模拟拖拽）
                await client.mouse_click(x, y)
                print(f"点击位置: {client.mouse_position}")

            await asyncio.sleep(0.3)

        print(f"\n最终鼠标位置: {client.mouse_position}")

    except Exception as e:
        print(f"发生错误: {e}")

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


if __name__ == "__main__":
    # 运行示例
    print("鼠标位置功能示例")
    print("=" * 50)

    try:
        asyncio.run(main())
    except KeyboardInterrupt:
        print("\n程序被用户中断")
    except Exception as e:
        print(f"程序执行失败: {e}")
