/**
 * BSD-style license; for more info see http://pmd.sourceforge.net/license.html
 */
package net.sourceforge.pmd.lang.java.javadoc;

import java.util.HashMap;
import java.util.Map;
import java.util.Set;

public final class JavadocTag {

	public final String label;
	public final String description;
	
	private static final Map<String, JavadocTag> TAGS_BY_ID = new HashMap<>();
	
	public static final JavadocTag AUTHOR  		= new JavadocTag("author", 	"Authors of the source code, in chronological order");
	public static final JavadocTag SINCE		= new JavadocTag("since", 	"Version of the source code that this item was introduced, can be a number or a date");
	public static final JavadocTag VERSION  	= new JavadocTag("version", "Current version number of the source code");
	public static final JavadocTag DEPRECATED	= new JavadocTag("deprecated", "Indicates that an item is a member of the deprecated API");
	public static final JavadocTag PARAM  		= new JavadocTag("param", 	" ");
	public static final JavadocTag THROWS  		= new JavadocTag("throws", 	" ");
	public static final JavadocTag RETURN  		= new JavadocTag("returns", " ");
	public static final JavadocTag SEE  		= new JavadocTag("see", 	" ");

/*	public static final JavadocTag POST  		= new JavadocTag("post", 	" ");
	public static final JavadocTag PRE  		= new JavadocTag("pre", 	" ");
	public static final JavadocTag RETURN  		= new JavadocTag("return", 	" ");
	public static final JavadocTag INV  		= new JavadocTag("inv", 	" ");
	public static final JavadocTag INVARIANT  	= new JavadocTag("invariant", 	" ");
	public static final JavadocTag PATTERN  	= new JavadocTag("pattern", 	" ");	
	public static final JavadocTag SERIAL  		= new JavadocTag("serial", 	" ");	
	public static final JavadocTag SERIAL_DATA	= new JavadocTag("serialData", 	" ");
	public static final JavadocTag SERIAL_FIELD	= new JavadocTag("serialField", 	" ");
	public static final JavadocTag GENERATED  	= new JavadocTag("generated", 	" ");
	public static final JavadocTag GENERATED_BY	= new JavadocTag("generatedBy", 	" ");  */
	
	private JavadocTag(String theLabel, String theDescription) {
		label = theLabel;
		description = theDescription;
		
		if (TAGS_BY_ID.containsKey(theLabel)) {
			throw new IllegalArgumentException("pre-existing tag!");
		}
		
		TAGS_BY_ID.put(theLabel, this);
	}
	
	public static JavadocTag tagFor(String id) {
		return TAGS_BY_ID.get(id);
	}
	
	public static Set<String> allTagIds() {
		return TAGS_BY_ID.keySet();
	}
}
