// src/composables/useTouch.js  （纯 JS）
/**
 * 提供 sleep / tapAt / longPressAt / drag / clickxy 五个工具。
 * clickxy 内会调用 Back、wsActionsRef、setComText、phoneXYinfoRef。
 */
export function useTouch({
    deviceInformation,   // ref([]) 读取 udid
    sendPointer,         // 来自 useCanvasPointer
    wsActionsRef,        // () => wsActions
    phoneXYinfoRef,      // ref([...]) 内含 id（screen坐标体系的 device id）
    Back,                // function Back('', index)
    setComText,          // function setComText(index)
}) {

    // 小工具：延迟
    const sleep = (ms) => new Promise(r => setTimeout(r, ms))

    // 轻点
    async function tapAt(udid, index, x, y, holdMs = 80) {
        sendPointer(udid, index, 0, x, y)  // down
        await sleep(holdMs)
        sendPointer(udid, index, 1, x, y)  // up
    }

    // 长按
    async function longPressAt(udid, index, x, y, holdMs = 1500) {
        sendPointer(udid, index, 0, x, y)  // down
        await sleep(holdMs)
        sendPointer(udid, index, 1, x, y)  // up
    }

    // 拖拽/滑动
    async function drag(udid, index, x1, y1, x2, y2, durationMs = 300, steps = 8) {
        sendPointer(udid, index, 0, x1, y1) // down
        const dx = (x2 - x1) / steps
        const dy = (y2 - y1) / steps
        const dt = Math.max(8, Math.floor(durationMs / steps))
        for (let i = 1; i <= steps; i++) {
            await sleep(dt)
            sendPointer(udid, index, 2, Math.round(x1 + dx * i), Math.round(y1 + dy * i)) // move
        }
        await sleep(20)
        sendPointer(udid, index, 1, x2, y2) // up
    }

    /**
     * clickxy：统一的“坐标点击”入口，保留你原来的 type 语义：
     * - type===3：点击 -> 返回 -> 下滑
     * - type===2：点击 -> 返回 -> 右滑
     * - type===1：点击评论框后粘贴发送（setComText）
     * - type===9：长按
     * - 默认：普通点击
     */
    async function clickxy(x, y, index, type) {
        const dev = deviceInformation.value[index]
        const wsActions = wsActionsRef && wsActionsRef()
        if (!dev || !dev.udid) {
            console.error('clickxy: no udid at index', index)
            return
        }
        const udid = dev.udid

        try {
            if (type === 3) {
                await tapAt(udid, index, x, y, 80)
                await sleep(300)
                Back('', index)
                await sleep(300)
                wsActions && wsActions.slideDown && wsActions.slideDown(phoneXYinfoRef.value[index].id, index)
                return
            }

            if (type === 2) {
                await tapAt(udid, index, x, y, 80)
                await sleep(300)
                Back('', index)
                await sleep(300)
                wsActions && wsActions.slideRight && wsActions.slideRight(phoneXYinfoRef.value[index].id, index)
                return
            }

            if (type === 1) {
                await tapAt(udid, index, x, y, 80)
                await sleep(300)
                setComText(index) // 评论框：粘贴发送
                return
            }

            if (type === 9) {
                await longPressAt(udid, index, x, y, 1500)
                return
            }

            // 默认：普通轻点
            await tapAt(udid, index, x, y, 80)

        } catch (e) {
            console.error('clickxy error:', e)
        }
    }

    return {
        sleep,
        tapAt,
        longPressAt,
        drag,
        clickxy,
    }
}
