package message

import (
	"strings"
	"time"
)

type ConversationCursor struct {
	PinnedAt *time.Time
	SortAt   time.Time
	ScopeID  string
}

func (cursor ConversationCursor) IsZero() bool {
	return cursor.PinnedAt == nil && cursor.SortAt.IsZero() && strings.TrimSpace(cursor.ScopeID) == ""
}

func normalizeConversationCursor(cursor ConversationCursor) (ConversationCursor, error) {
	if cursor.IsZero() {
		return ConversationCursor{}, nil
	}
	trimmedScopeID := strings.TrimSpace(cursor.ScopeID)
	if cursor.SortAt.IsZero() || trimmedScopeID == "" {
		return ConversationCursor{}, badRequest("invalid conversation cursor")
	}
	var pinnedAt *time.Time
	if cursor.PinnedAt != nil {
		normalizedPinnedAt := cursor.PinnedAt.UTC()
		if normalizedPinnedAt.IsZero() {
			return ConversationCursor{}, badRequest("invalid conversation cursor")
		}
		pinnedAt = &normalizedPinnedAt
	}
	return ConversationCursor{PinnedAt: pinnedAt, SortAt: cursor.SortAt.UTC(), ScopeID: trimmedScopeID}, nil
}
