// 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.Path(), ".proto")+".pb.go", f.GoImportPath)
	g.P("// Code generated by protoc-gen-go. DO NOT EDIT.")
	g.P("// source: ", f.Desc.Path())
	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)
	}
}
