// try_catch — 判斷上游結果是否有 error，決定走 try 或 catch 分支
//
//go:build tinygo

package main

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

type Input struct {
	Result json.RawMessage `json:"result"`
	Error  string          `json:"error"`
}

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.Error != "" {
		out, _ := json.Marshal(map[string]interface{}{
			"success": true,
			"data": map[string]interface{}{
				"branch": "catch",
				"error":  input.Error,
			},
		})
		os.Stdout.Write(out)
		return
	}

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

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