import { type MembershipLevel, MembershipLevelEnum, } from "@/constants/membershipLevels" import type { z } from "zod" import type { Membership, Memberships, User } from "@/types/user" import type { getMembershipCardsSchema } from "@/server/routers/user/output" export enum scandicMemberships { guestpr = "guestpr", scandicfriends = "scandicfriend's", sas_eb = "sas_eb", scandic_native_tiers = "scandic_native_tiers", } export function getFriendsMembership(memberships: Memberships) { return memberships?.find( (membership) => membership.membershipType.toLowerCase() === scandicMemberships.guestpr ) as FriendsMembership | undefined } export type FriendsMembership = Omit< NonNullable, "membershipLevel" | "nextLevel" > & { membershipLevel: MembershipLevel nextLevel: MembershipLevel } export function getEurobonusMembership(memberships: Memberships) { return memberships?.find( (membership) => membership.membershipType.toLowerCase() === scandicMemberships.sas_eb ) } export function getMembershipCards( memberships: z.infer ) { return memberships.filter(function (membership) { return ( membership.membershipType.toLowerCase() !== scandicMemberships.guestpr && membership.membershipType.toLowerCase() !== scandicMemberships.scandicfriends ) }) } export function isHighestMembership( membershipLevel: MembershipLevel | undefined ) { return membershipLevel == MembershipLevelEnum.L7 } export function getInitials( firstName: User["firstName"], lastName: User["lastName"] ) { if (!firstName || !lastName) return null const firstInitial = firstName.charAt(0).toUpperCase() const lastInitial = lastName.charAt(0).toUpperCase() return `${firstInitial}${lastInitial}` } export function getSteppedUpLevel( currentValue: MembershipLevel, stepsUp: number ): MembershipLevel { const values = Object.values(MembershipLevelEnum) const currentIndex = values.indexOf(currentValue as MembershipLevelEnum) if (currentIndex === -1 || currentIndex === values.length - 1) { return currentValue } return values[currentIndex + stepsUp] }