package neko

import (
	"fmt"
	"runtime"
	"strings"
)

const Header = `&34
    _   __     __
   / | / /__  / /______   \    /\
  /  |/ / _ \/ //_/ __ \   )  ( ')
 / /|  /  __/ ,< / /_/ /  (  /  )
/_/ |_/\___/_/|_|\____/    \(__)|
&1&37  nurdism/m1k1o &33%s %s&0
`

var (
	//
	buildDate = "dev"
	//
	gitCommit = "dev"
	//
	gitBranch = "dev"
	//
	gitTag = "dev"
)

var Version = &version{
	GitCommit: gitCommit,
	GitBranch: gitBranch,
	GitTag:    gitTag,
	BuildDate: buildDate,
	GoVersion: runtime.Version(),
	Compiler:  runtime.Compiler,
	Platform:  fmt.Sprintf("%s/%s", runtime.GOOS, runtime.GOARCH),
}

type version struct {
	GitCommit string
	GitBranch string
	GitTag    string
	BuildDate string
	GoVersion string
	Compiler  string
	Platform  string
}

func (i *version) String() string {
	version := i.GitTag
	if version == "" || version == "dev" {
		version = i.GitBranch
	}

	return fmt.Sprintf("%s@%s", version, i.GitCommit)
}

func (i *version) Details() string {
	return "\n" + strings.Join([]string{
		fmt.Sprintf("Version %s", i.String()),
		fmt.Sprintf("GitCommit %s", i.GitCommit),
		fmt.Sprintf("GitBranch %s", i.GitBranch),
		fmt.Sprintf("GitTag %s", i.GitTag),
		fmt.Sprintf("BuildDate %s", i.BuildDate),
		fmt.Sprintf("GoVersion %s", i.GoVersion),
		fmt.Sprintf("Compiler %s", i.Compiler),
		fmt.Sprintf("Platform %s", i.Platform),
	}, "\n") + "\n"
}