package memorywatcher

import "time"

// StatusState is the runtime-only Cloud Memory synchronization state.
type StatusState string

const (
	// StatusReady means the local branch has no known commits waiting to push.
	StatusReady StatusState = "ready"
	// StatusPendingSync means local commits are safe and a cloud push is pending.
	StatusPendingSync StatusState = "pending_sync"
	// StatusDegraded means the local synchronization pipeline cannot currently
	// make progress without recovering a lookup, clone, watcher, or commit error.
	StatusDegraded StatusState = "degraded"
)

// StatusReason is a bounded reason code suitable for runtime status APIs and
// metrics. It deliberately excludes raw errors and repository details.
type StatusReason string

const (
	StatusReasonLookupFailed  StatusReason = "lookup_failed"
	StatusReasonAuthFailed    StatusReason = "auth_failed"
	StatusReasonCloneFailed   StatusReason = "clone_failed"
	StatusReasonWatcherFailed StatusReason = "watcher_failed"
	StatusReasonCommitFailed  StatusReason = "commit_failed"
	StatusReasonPushFailed    StatusReason = "push_failed"
)

// Status is a transient snapshot of Cloud Memory synchronization. RetryAt is
// populated only while a failed push is waiting for its next bounded retry.
// The snapshot is process-local state and must not be persisted as Memory
// history or treated as the timestamp of a real upstream commit.
type Status struct {
	State   StatusState
	Reason  StatusReason
	RetryAt time.Time
}

// StatusListener receives status transitions. Implementations must return
// promptly; the watcher invokes the callback from its serialized Git pipeline.
type StatusListener func(Status)
