// 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.

package source

import "fmt"

var (
	namesSymbolKind         [int(FieldSymbol) + 1]string
	namesDiagnosticSeverity [int(SeverityError) + 1]string
	namesCompletionItemKind [int(PackageCompletionItem) + 1]string
)

func init() {
	namesSymbolKind[PackageSymbol] = "Package"
	namesSymbolKind[StructSymbol] = "Struct"
	namesSymbolKind[VariableSymbol] = "Variable"
	namesSymbolKind[ConstantSymbol] = "Constant"
	namesSymbolKind[FunctionSymbol] = "Function"
	namesSymbolKind[MethodSymbol] = "Method"
	namesSymbolKind[InterfaceSymbol] = "Interface"
	namesSymbolKind[NumberSymbol] = "Number"
	namesSymbolKind[StringSymbol] = "String"
	namesSymbolKind[BooleanSymbol] = "Boolean"
	namesSymbolKind[FieldSymbol] = "Field"

	namesDiagnosticSeverity[SeverityWarning] = "Warning"
	namesDiagnosticSeverity[SeverityError] = "Error"

	namesCompletionItemKind[Unknown] = "Unknown"
	namesCompletionItemKind[InterfaceCompletionItem] = "InterfaceCompletion"
	namesCompletionItemKind[StructCompletionItem] = "StructCompletion"
	namesCompletionItemKind[TypeCompletionItem] = "TypeCompletion"
	namesCompletionItemKind[ConstantCompletionItem] = "ConstantCompletion"
	namesCompletionItemKind[FieldCompletionItem] = "FieldCompletion"
	namesCompletionItemKind[ParameterCompletionItem] = "ParameterCompletion"
	namesCompletionItemKind[VariableCompletionItem] = "VariableCompletion"
	namesCompletionItemKind[FunctionCompletionItem] = "FunctionCompletion"
	namesCompletionItemKind[MethodCompletionItem] = "MethodCompletion"
	namesCompletionItemKind[PackageCompletionItem] = "PackageCompletion"
}

func formatEnum(f fmt.State, c rune, i int, names []string, unknown string) {
	s := ""
	if i >= 0 && i < len(names) {
		s = names[i]
	}
	if s != "" {
		fmt.Fprint(f, s)
	} else {
		fmt.Fprintf(f, "%s(%d)", unknown, i)
	}
}

func parseEnum(s string, names []string) int {
	for i, name := range names {
		if s == name {
			return i
		}
	}
	return 0
}

func (e SymbolKind) Format(f fmt.State, c rune) {
	formatEnum(f, c, int(e), namesSymbolKind[:], "SymbolKind")
}

func ParseSymbolKind(s string) SymbolKind {
	return SymbolKind(parseEnum(s, namesSymbolKind[:]))
}

func (e DiagnosticSeverity) Format(f fmt.State, c rune) {
	formatEnum(f, c, int(e), namesDiagnosticSeverity[:], "DiagnosticSeverity")
}

func ParseDiagnosticSeverity(s string) DiagnosticSeverity {
	return DiagnosticSeverity(parseEnum(s, namesDiagnosticSeverity[:]))
}

func (e CompletionItemKind) Format(f fmt.State, c rune) {
	formatEnum(f, c, int(e), namesCompletionItemKind[:], "CompletionItemKind")
}

func ParseCompletionItemKind(s string) CompletionItemKind {
	return CompletionItemKind(parseEnum(s, namesCompletionItemKind[:]))
}
