// wait — 等待指定毫秒數後繼續（最多 30 秒）
// 注意：TinyGo/WASM 環境中 time.Sleep 可能不可用，改用 busy-wait 模擬
package main

import (
	"encoding/json"
	"io"
	"os"
	"time"
)

type Input struct {
	Ms      int                    `json:"ms"`
	Context map[string]interface{} `json:"context"`
}

func main() {
	raw, err := io.ReadAll(os.Stdin)
	if err != nil {
		writeError("failed to read stdin: " + err.Error())
		return
	}
	var input Input
	if err := json.Unmarshal(raw, &input); err != nil {
		writeError("invalid input JSON: " + err.Error())
		return
	}
	if input.Ms <= 0 {
		writeError("ms 必須大於 0")
		return
	}
	ms := input.Ms
	if ms > 30000 {
		ms = 30000
	}

	time.Sleep(time.Duration(ms) * time.Millisecond)

	result := make(map[string]interface{})
	for k, v := range input.Context {
		result[k] = v
	}
	result["waited_ms"] = ms

	out, _ := json.Marshal(map[string]interface{}{"success": true, "data": result})
	os.Stdout.Write(out)
}

func writeError(msg string) {
	out, _ := json.Marshal(map[string]interface{}{"success": false, "error": msg})
	os.Stdout.Write(out)
}
