// Copyright 2022 Harness Inc. All rights reserved.
// Use of this source code is governed by the Polyform Free Trial License
// that can be found in the LICENSE.md file for this repository.

package enum

import "strings"

// PathTargetType defines the type of the target of a path.
type PathTargetType string

const (
	PathTargetTypeRepo  PathTargetType = "repo"
	PathTargetTypeSpace PathTargetType = "space"
)

// PathAttr defines path attributes that can be used for sorting and filtering.
type PathAttr int

// Order enumeration.
const (
	PathAttrNone PathAttr = iota
	PathAttrID
	PathAttrValue
	PathAttrCreated
	PathAttrUpdated
)

// ParsePathAttr parses the path attribute string
// and returns the equivalent enumeration.
func ParsePathAttr(s string) PathAttr {
	switch strings.ToLower(s) {
	case id:
		return PathAttrID
	case value:
		return PathAttrValue
	case created, createdAt:
		return PathAttrCreated
	case updated, updatedAt:
		return PathAttrUpdated
	default:
		return PathAttrNone
	}
}

// String returns the string representation of the attribute.
func (a PathAttr) String() string {
	switch a {
	case PathAttrID:
		return id
	case PathAttrValue:
		return value
	case PathAttrCreated:
		return created
	case PathAttrUpdated:
		return updated
	case PathAttrNone:
		return ""
	default:
		return undefined
	}
}