package version

import (
	"regexp"
	"strings"
)

const (
	Development = iota
	Alpha
	Beta
	RC
	Stable
)

func expandStability(stability string) string {
	stability = strings.ToLower(stability)

	switch stability {
	case "a":
		return "alpha"
	case "b":
		return "beta"
	case "p":
		return "patch"
	case "pl":
		return "patch"
	case "rc":
		return "RC"
	}

	return stability
}

func parseStability(version string) string {
	version = regexp.MustCompile(`(?i)#.+$`).ReplaceAllString(version, " ")
	version = strings.ToLower(version)

	if strings.HasPrefix(version, "dev-") || strings.HasSuffix(version, "-dev") {
		return "dev"
	}

	result := RegFind(`(?i)^v?(\d{1,3})(\.\d+)?(\.\d+)?(\.\d+)?`+modifierRegex+`$`, version)
	if result != nil {
		if len(result) > 3 {
			return "dev"
		}
	}

	if result[1] != "" {
		if "beta" == result[1] || "b" == result[1] {
			return "beta"
		}
		if "alpha" == result[1] || "a" == result[1] {
			return "alpha"
		}
		if "rc" == result[1] {
			return "RC"
		}
	}

	return "stable"
}

func GetStability(version string) int {
	result := RegFind(`(?i)(stable|RC|beta|alpha|dev)`, Normalize(version))
	if len(result) == 0 {
		return Stable
	}

	switch result[1] {
	case "dev":
		return Development
	case "alpha":
		return Alpha
	case "beta":
		return Beta
	case "RC":
		return RC
	}

	return Stable
}