package taskboard

import "strings"

func normalizeTaskBrowseCursor(cursor TaskBrowseCursor, requestSortMode string) (TaskBrowseCursor, error) {
	if cursor.IsZero() {
		return TaskBrowseCursor{}, nil
	}
	normalizedCursor := normalizeTaskBrowseCursorForQuery(cursor)
	if normalizedCursor.SortMode != normalizeTaskBoardSortMode(requestSortMode) {
		return TaskBrowseCursor{}, badRequest("invalid browse cursor")
	}
	if strings.TrimSpace(normalizedCursor.TaskID) == "" || normalizedCursor.TaskNumber <= 0 {
		return TaskBrowseCursor{}, badRequest("invalid browse cursor")
	}
	switch normalizedCursor.SortMode {
	case "recently_updated":
		if normalizedCursor.ActivityAt.IsZero() {
			return TaskBrowseCursor{}, badRequest("invalid browse cursor")
		}
	case "created_time":
		if normalizedCursor.CreatedAt.IsZero() || normalizedCursor.ActivityAt.IsZero() {
			return TaskBrowseCursor{}, badRequest("invalid browse cursor")
		}
	case "title":
		if normalizedCursor.Title == "" || normalizedCursor.CreatedAt.IsZero() {
			return TaskBrowseCursor{}, badRequest("invalid browse cursor")
		}
	case "priority":
		if normalizedCursor.CreatedAt.IsZero() {
			return TaskBrowseCursor{}, badRequest("invalid browse cursor")
		}
	case "manual":
		if normalizedCursor.CreatedAt.IsZero() {
			return TaskBrowseCursor{}, badRequest("invalid browse cursor")
		}
	default:
		return TaskBrowseCursor{}, badRequest("invalid browse cursor")
	}
	return normalizedCursor, nil
}
