// set — 設定/覆寫變數，傳遞到下一個節點
// 支援 assignments 陣列或 values 物件兩種格式
package main

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

type Input struct {
	Assignments []Assignment           `json:"assignments"`
	Values      map[string]interface{} `json:"values"`
	Context     map[string]interface{} `json:"context"`
}

type Assignment struct {
	Key   string      `json:"key"`
	Value interface{} `json:"value"`
}

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
	}

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

	if len(input.Assignments) > 0 {
		for _, a := range input.Assignments {
			result[a.Key] = a.Value
		}
	} else if len(input.Values) > 0 {
		for k, v := range input.Values {
			result[k] = v
		}
	} else {
		writeError("需提供 assignments 陣列或 values 物件")
		return
	}

	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)
}
