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

package java

import (
	"bytes"
	"log"

	"v.io/x/ref/lib/vdl/compile"
)

const packageTmpl = header + `
// Source: {{ .Source }}

{{ .Doc }}
package {{ .PackagePath }};
`

// genPackageFileJava generates the Java package info file, iff any package
// comments were specified in the package's VDL files.
func genJavaPackageFile(pkg *compile.Package, env *compile.Env) *JavaFileInfo {
	generated := false
	for _, file := range pkg.Files {
		if file.PackageDef.Doc != "" {
			if generated {
				log.Printf("WARNING: Multiple vdl files with package documentation. One will be overwritten.")
				return nil
			}
			generated = true

			data := struct {
				Doc         string
				FileDoc     string
				PackagePath string
				Source      string
			}{
				Doc:         javaDoc(file.PackageDef.Doc, file.PackageDef.DocSuffix),
				FileDoc:     pkg.FileDoc,
				PackagePath: javaPath(javaGenPkgPath(pkg.GenPath)),
				Source:      javaFileNames(pkg.Files),
			}
			var buf bytes.Buffer
			err := parseTmpl("package", packageTmpl).Execute(&buf, data)
			if err != nil {
				log.Fatalf("vdl: couldn't execute package template: %v", err)
			}
			return &JavaFileInfo{
				Name: "package-info.java",
				Data: buf.Bytes(),
			}
		}
	}
	return nil
}
