package com.fasterxml.jackson.dataformat.protobuf.schemagen;

import java.util.Set;

import com.fasterxml.jackson.databind.JavaType;
import com.fasterxml.jackson.databind.SerializerProvider;
import com.fasterxml.jackson.databind.jsonFormatVisitors.JsonStringFormatVisitor.Base;
import com.squareup.protoparser.EnumConstantElement;
import com.squareup.protoparser.EnumElement;
import com.squareup.protoparser.TypeElement;

public class EnumElementVisitor extends Base implements TypeElementBuilder {

	EnumElement.Builder _builder;

	DefaultTagGenerator _tagGenerator = new DefaultTagGenerator(0);

	public EnumElementVisitor(SerializerProvider provider, JavaType type,
			DefinedTypeElementBuilders definedTypeElementBuilders, boolean isNested) {
		
		if (!type.isEnumType()) {
			throw new IllegalArgumentException("Expected an enum, however given type is " + type);
		}

		_builder = EnumElement.builder();
		_builder.name(type.getRawClass().getSimpleName());
		_builder.documentation("Enum for " + type.toCanonical());
	}

	@Override
	public TypeElement build() {
		return _builder.build();
	}

	@Override
	public void enumTypes(Set<String> enums) {
		for (String eName : enums) {
			_builder.addConstant(buildEnumConstant(eName));
		}
	}

	protected EnumConstantElement buildEnumConstant(String name) {
		EnumConstantElement.Builder builder = EnumConstantElement.builder();
		builder.name(name);
		builder.tag(_tagGenerator.nextTag());
		return builder.build();
	}
}