// Code generated by ndpgen. DO NOT EDIT.
//
// This file provides stub implementations for non-WASM platforms.
// It allows Go plugins to compile and run tests outside of WASM,
// but the actual functionality is only available in WASM builds.
//
//go:build !wasip1

package {{.Package}}

{{- /* Generate type alias definitions */ -}}
{{- range .Capability.TypeAliases}}

{{- if .Doc}}
{{formatDoc .Doc}}
{{- end}}
type {{.Name}} {{.Type}}
{{- end}}

{{- /* Generate const definitions */ -}}
{{- range .Capability.Consts}}
{{- if .Values}}

const (
{{- $type := .Type}}
{{- range $i, $v := .Values}}
{{- if $v.Doc}}
{{formatDoc $v.Doc | indent 1}}
{{- end}}
{{- if $type}}
	{{$v.Name}} {{$type}} = {{$v.Value}}
{{- else}}
	{{$v.Name}} = {{$v.Value}}
{{- end}}
{{- end}}
)
{{- end}}
{{- end}}

{{- /* Generate Error() methods for string type aliases with const values (implements error interface) */ -}}
{{- $consts := .Capability.Consts}}
{{- range .Capability.TypeAliases}}
{{- if eq .Type "string"}}
{{- $typeName := .Name}}
{{- range $consts}}
{{- if eq .Type $typeName}}

// Error implements the error interface for {{$typeName}}.
func (e {{$typeName}}) Error() string { return string(e) }
{{- end}}
{{- end}}
{{- end}}
{{- end}}

{{- /* Generate struct definitions */ -}}
{{- range .Capability.Structs}}

{{- if .Doc}}
{{formatDoc .Doc}}
{{- else}}
// {{.Name}} represents the {{.Name}} data structure.
{{- end}}
type {{.Name}} struct {
{{- range .Fields}}
{{- if .Doc}}
{{formatDoc .Doc | indent 1}}
{{- end}}
	{{.Name}} {{.Type}} `json:"{{.JSONTag}}{{if .OmitEmpty}},omitempty{{end}}"`
{{- end}}
}
{{- end}}

{{- /* Generate main interface based on required flag */ -}}
{{if .Capability.Required}}

// {{agentName .Capability}} requires all methods to be implemented.
{{- if .Capability.Doc}}
{{formatDoc .Capability.Doc}}
{{- end}}
type {{agentName .Capability}} interface {
{{- range .Capability.Methods}}
	// {{.Name}}{{if .Doc}} - {{.Doc}}{{end}}
	{{- if and .HasInput .HasOutput}}
	{{.Name}}({{.Input.Type}}) ({{.Output.Type}}, error)
	{{- else if .HasInput}}
	{{.Name}}({{.Input.Type}}) error
	{{- else if .HasOutput}}
	{{.Name}}() ({{.Output.Type}}, error)
	{{- else}}
	{{.Name}}() error
	{{- end}}
{{- end}}
}
{{- else}}

// {{agentName .Capability}} is the marker interface for {{.Package}} plugins.
// Implement one or more of the provider interfaces below.
{{- if .Capability.Doc}}
{{formatDoc .Capability.Doc}}
{{- end}}
type {{agentName .Capability}} interface{}
{{- end}}

{{- /* Generate optional provider interfaces for non-required capabilities */ -}}
{{- if not .Capability.Required}}
{{- range .Capability.Methods}}

// {{providerInterface .}} provides the {{.Name}} function.
type {{providerInterface .}} interface {
	{{- if and .HasInput .HasOutput}}
	{{.Name}}({{.Input.Type}}) ({{.Output.Type}}, error)
	{{- else if .HasInput}}
	{{.Name}}({{.Input.Type}}) error
	{{- else if .HasOutput}}
	{{.Name}}() ({{.Output.Type}}, error)
	{{- else}}
	{{.Name}}() error
	{{- end}}
}
{{- end}}
{{- end}}

// NotImplementedCode is the standard return code for unimplemented functions.
const NotImplementedCode int32 = -2

// Register is a no-op on non-WASM platforms.
// This stub allows code to compile outside of WASM.
{{- if .Capability.Required}}
func Register(_ {{agentName .Capability}}) {}
{{- else}}
func Register(_ {{agentName .Capability}}) {}
{{- end}}
