#ifndef MOUSE_H
#define MOUSE_H

#include "../plugin.h"
#include <napi.h>
#include <thread>
#include <mutex>
#include <atomic>

class MousePlugin : public Plugin {
public:
    std::string GetName() const override { return "mouse"; }
    Napi::Object Init(Napi::Env env, Napi::Object exports) override;

private:
    // 基础方法
    static Napi::Value Move(const Napi::CallbackInfo& info);
    static Napi::Value GetPosition(const Napi::CallbackInfo& info);
    static Napi::Value Click(const Napi::CallbackInfo& info);
    static Napi::Value Scroll(const Napi::CallbackInfo& info);

    // 监听方法（完全支持你的回调语法）
    static Napi::Value start(const Napi::CallbackInfo& info);
    static Napi::Value stop(const Napi::CallbackInfo& info);
    
    // 平台实现
    static void PlatformMove(int x, int y);
    static void PlatformGetPosition(int& x, int& y);
    static void PlatformClick(int button, bool isDown);
    static void PlatformScroll(int dx, int dy);

    // 线程相关
    static void ListenLoop(Napi::ThreadSafeFunction tsfn);

    // 静态成员
    static std::thread s_listenThread;
    static std::mutex s_mutex;
    static std::atomic<bool> s_isListening;
    static int s_lastX;
    static int s_lastY;
};

#endif