import { MembershipLevelEnum } from "@scandic-hotels/common/constants/membershipLevels" import { serverClient } from "@/lib/trpc/server" import { isHighestMembership } from "@/utils/user" import { type LevelProgressData, type ProgressCalculation } from "./types" import type { NativeFriendsMembership } from "@scandic-hotels/trpc/types/user" export async function getLevelProgressData( membership: NonNullable ): Promise { const caller = await serverClient() const currentLevel = await caller.contentstack.loyaltyLevels.byLevel({ level: MembershipLevelEnum[membership.tier], }) const earned = membership.tierPoints ?? 0 // Check if user has points left to retain their current level. const toKeepCurrent = currentLevel?.required_points && earned < currentLevel.required_points ? currentLevel.required_points - earned : undefined if (isHighestMembership(membership.tier)) { return toKeepCurrent ? { type: "highest-incomplete", earned, toKeepCurrent, required: currentLevel!.required_points, } : { type: "highest-complete", earned } } return { type: "lower-level", earned, toNext: membership.pointsToNextTier ?? 0, toKeepCurrent, } } export function calculateProgress( earned: number, total: number, keepThreshold?: number ): ProgressCalculation { const percentage = (earned / total) * 100 const markerPosition = keepThreshold ? ((earned + keepThreshold) / total) * 100 : undefined return { percentage, markerPosition, total } }