package main

import (
	"bytes"
	"text/template"
)

type TemplateData struct {
	PackageName   string
	Imports       []Import
	Interfaces    []InterfaceData
	NeedsErrorVar bool
}

const dummyTemplate = `// Code generated by dummygen; DO NOT EDIT.

package {{ .PackageName }}

{{- if .Imports }}
import (
{{- range .Imports }}
    {{ if .Name }}{{ .Name }} {{ end }}"{{ .Path }}"
{{- end }}
)
{{- end }}

{{- if .NeedsErrorVar }}

var ErrorNotImplemented = errors.New("not implemented")
{{- end }}

{{- range .Interfaces }}
{{- $structName := .StructName }}

type {{ .StructName }} struct {
}

{{- range .Methods }}

func (d *{{ $structName }}) {{ .Name }}({{ range $index, $param := .Params }}{{ if $index }}, {{ end }}{{ $param.Name }} {{ $param.Type }}{{ end }}){{ if .ResultDecl }} {{ .ResultDecl }}{{ end }} {
{{- if .Results }}
	return {{ range $index, $result := .Results }}{{ if $index }}, {{ end }}{{ $result.ZeroValue }}{{ end }}
{{- end }}
}
{{- end }}
{{- end }}
`

func renderTemplate(data TemplateData) ([]byte, error) {
	tmpl, err := template.New("dummy").Parse(dummyTemplate)
	if err != nil {
		return nil, err
	}
	var buf bytes.Buffer
	if err := tmpl.Execute(&buf, data); err != nil {
		return nil, err
	}
	return buf.Bytes(), nil
}
