// switch — 依值路由到對應分支
//
//go:build tinygo

package main

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

type Case struct {
	Match  string `json:"match"`
	Branch string `json:"branch"`
}

type Input struct {
	Value         string `json:"value"`
	Cases         []Case `json:"cases"`
	DefaultBranch string `json:"default_branch"`
}

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
	}

	for _, c := range input.Cases {
		if c.Match == input.Value {
			writeSuccess(c.Branch)
			return
		}
	}

	branch := input.DefaultBranch
	if branch == "" {
		branch = "default"
	}
	writeSuccess(branch)
}

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

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