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

import (
	"bytes"
	"strings"
)

type Sign string

const (
	// VoidSign denotes a signature of a Java void type.
	VoidSign Sign = "V"
	// ByteSign denotes a signature of a Java byte type.
	ByteSign Sign = "B"
	// BoolSign denotes a signature of a Java boolean type.
	BoolSign Sign = "Z"
	// CharSign denotes a signature of a Java char type.
	CharSign Sign = "C"
	// ShortSign denotes a signature of a Java short type.
	ShortSign Sign = "S"
	// IntSign denotes a signature of a Java int type.
	IntSign Sign = "I"
	// LongSign denotes a signature of a Java long type.
	LongSign Sign = "J"
	// FloatSign denotes a signature of a Java float type.
	FloatSign Sign = "F"
	// DoubleSign denotes a signature of a Java double type.
	DoubleSign Sign = "D"
)

var (
	// StringSign denotes a signature of a Java String type.
	StringSign = ClassSign("java.lang.String")
	// ObjectSign denotes a signature of a Java Object type.
	ObjectSign = ClassSign("java.lang.Object")
	// TypeSign denotes a signature of a Java Type type.
	TypeSign = ClassSign("java.lang.reflect.Type")
	// ListSign denotes a signature of a Java List type.
	ListSign = ClassSign("java.util.List")
	// SetSign denotes a signature of a Java Set type.
	SetSign = ClassSign("java.util.Set")
	// MapSign denotes a signature of a Java Map type.
	MapSign = ClassSign("java.util.Map")
	// MultimapSign denotes a signature of a Guava Multimap type.
	MultimapSign = ClassSign("com.google.common.collect.Multimap")
	// IteratorSign denotes a signature of a Java Iterator type.
	IteratorSign = ClassSign("java.util.Iterator")
	// ByteArraySign denotes a signature of a Java byte array type.
	ByteArraySign = ArraySign(ByteSign)
	// DateTimeSign denotes a signature of a Java DateTime type.
	DateTimeSign = ClassSign("org.joda.time.DateTime")
	// DurationSign denotes a signature of a Java Duration type.
	DurationSign = ClassSign("org.joda.time.Duration")
	// VExceptionSign denotes a signature of a Java VException type.
	VExceptionSign = ClassSign("io.v.v23.verror.VException")
	// VDLValueSign denotes a signature of a Java VdlValue type.
	VdlValueSign = ClassSign("io.v.v23.vdl.VdlValue")
)

// ArraySign returns the array signature, given the underlying array type.
func ArraySign(sign Sign) Sign {
	return "[" + sign
}

// ClassSign returns the signature of the specified Java class.
// The class should be specified in java "java.lang.String" style.
func ClassSign(className string) Sign {
	return Sign("L" + strings.Replace(className, ".", "/", -1) + ";")
}

// FuncSign returns the signature of the specified java function.
func FuncSign(argSigns []Sign, retSign Sign) Sign {
	var buf bytes.Buffer
	buf.WriteRune('(')
	for _, sign := range argSigns {
		buf.WriteString(string(sign))
	}
	buf.WriteRune(')')
	buf.WriteString(string(retSign))
	return Sign(buf.String())
}
