// Copyright 2018 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

// The protoc-gen-go binary is a protoc plugin to generate a Go protocol
// buffer package.
package main

import (
	"strings"

	"google.golang.org/proto/protogen"
)

func main() {
	protogen.Run(func(gen *protogen.Plugin) error {
		for _, f := range gen.Files {
			if !f.Generate {
				continue
			}
			genFile(gen, f)
		}
		return nil
	})
}

func genFile(gen *protogen.Plugin, f *protogen.File) {
	g := gen.NewGeneratedFile(strings.TrimSuffix(f.Desc.GetName(), ".proto") + ".pb.go")
	g.P("// Code generated by protoc-gen-go. DO NOT EDIT.")
	g.P("// source: ", f.Desc.GetName())
	g.P()
	g.P("package TODO")
	g.P()

	for _, m := range f.Messages {
		genMessage(gen, g, m)
	}

	// TODO: Everything.
}

func genMessage(gen *protogen.Plugin, g *protogen.GeneratedFile, m *protogen.Message) {
	g.P("type ", m.GoIdent, " struct {")
	g.P("}")
	g.P()

	for _, nested := range m.Messages {
		genMessage(gen, g, nested)
	}
}
