package model

import "strings"

// ReportVisibility controls which audience should see a step in reports/timelines.
type ReportVisibility string

const (
	ReportVisibilityUnspecified ReportVisibility = ""
	ReportVisibilityHidden      ReportVisibility = "hidden"
	ReportVisibilityUser        ReportVisibility = "user"
	ReportVisibilityBackoffice  ReportVisibility = "backoffice"
	ReportVisibilityAudit       ReportVisibility = "audit"
)

// NormalizeReportVisibility trims and lowercases the visibility value.
func NormalizeReportVisibility(value ReportVisibility) ReportVisibility {
	return ReportVisibility(strings.ToLower(strings.TrimSpace(string(value))))
}

// IsValidReportVisibility reports whether the value is a supported enum variant.
func IsValidReportVisibility(value ReportVisibility) bool {
	switch NormalizeReportVisibility(value) {
	case ReportVisibilityUnspecified,
		ReportVisibilityHidden,
		ReportVisibilityUser,
		ReportVisibilityBackoffice,
		ReportVisibilityAudit:
		return true
	default:
		return false
	}
}

// IsUserVisible returns true when the step should be shown to end users.
// Unspecified is treated as user-visible for backward compatibility.
func (value ReportVisibility) IsUserVisible() bool {
	switch NormalizeReportVisibility(value) {
	case ReportVisibilityUnspecified, ReportVisibilityUser:
		return true
	default:
		return false
	}
}
