package plugin

import (
	"strconv"

	"git.apinb.com/bsm-tools/protoc-gen-ts/internal/codegen"
	"google.golang.org/protobuf/reflect/protoreflect"
)

type enumGenerator struct {
	pkg  protoreflect.FullName
	enum protoreflect.EnumDescriptor
}

func (e enumGenerator) Generate(f *codegen.File) {
	commentGenerator{descriptor: e.enum}.generateLeading(f, 0)
	f.P("export type ", scopedDescriptorTypeName(e.pkg, e.enum), " =")
	if e.enum.Values().Len() == 1 {
		commentGenerator{descriptor: e.enum.Values().Get(0)}.generateLeading(f, 1)
		f.P(t(1), strconv.Quote(string(e.enum.Values().Get(0).Name())), ";")
		return
	}
	rangeEnumValues(e.enum, func(value protoreflect.EnumValueDescriptor, last bool) {
		commentGenerator{descriptor: value}.generateLeading(f, 1)
		if last {
			f.P(t(1), "| ", strconv.Quote(string(value.Name())), ";")
		} else {
			f.P(t(1), "| ", strconv.Quote(string(value.Name())))
		}
	})
}