import { Level, Member, Reward, Tier, Benefit } from './membership.interface'; import { Types } from 'mongoose'; export declare function runLevelCycleExpression(level: number, experience: number, rule: Level.CycleRule): { level: number; experience: number; }; export declare function resetExp(original: { level: number; experience: number; }, rules: Level.CycleRule[]): any; export declare function expToLevelUp(expRange: Level.ExperienceRange[], baseExpToLevelUp: number, level: number): any; export declare function fixVoucherForLevel(onLevelReward: Reward.OnLevelReward, level: number): Types.ObjectId[] | null; export declare function drawVoucherForLevel(onLevelReward: Reward.OnLevelReward, level: number): Types.ObjectId | null; export declare function calculateMemberStat(oriStat: Member.Stat, stat: { products: Member.ProductCount[]; billSize: number; visitedAt: Date; }): Member.Stat; export declare function increaseExperienceFn(original: { level: number; experience: number; }, experience: number, config: { expRange: Level.ExperienceRange[]; baseExpToLevelUp: number; onLevelReward: Reward.OnLevelReward; }): any; export declare function decideLevelTier(currentLevel: any, tiers: T[]): number; export declare function extendMemberTitle(titles: Member.TitleInfo[], id: Types.ObjectId, day: number, currTime: Date): any; export declare function revertMemberTitle(titles: Member.TitleInfo[], id: Types.ObjectId, day: number): any; export interface BenefitInLevelTierPayload { tier: BenefitInTierPayload; level: BenefitInLevelPayload; } export declare function benefitInLevelTier({ level, tier, }: BenefitInLevelTierPayload): boolean; interface BenefitInLevelPayload { min: number; max: number | null; current: number; } interface BenefitInTierPayload { min: number | null; max: number | null; current: number; } export declare function hasBenefitTitle(requiredId: string, titles: Member.TitleInfo[]): boolean; export interface HasBenefitPayloadMember { membershipId: string; level: number; tier: number | null; titles: Member.TitleInfo[]; } export interface HasBenefitPayloadBenefit { membershipId: string; level: { min: number; max: number | null; }; tier: { min: number | null; max: number | null; }; title?: string; } export interface HasBenefitPayload { member: HasBenefitPayloadMember; benefit: HasBenefitPayloadBenefit; } export declare function hasBenefit({ member, benefit }: HasBenefitPayload): boolean; export declare function benefitUsableTime(currentTime: Date, benefit: Benefit.Benefit, birthday?: Date): any; export {};