import { CaseOpen } from '../database/entities/CaseOpen';
export declare const CASE_DEFINITIONS: {
    readonly free_case_discord: {
        readonly key: "free_case_discord";
        readonly name: "FREE CASE DISCORD";
        readonly imageName: "free-case-discord.png";
        readonly price: 0;
        readonly rewards: readonly [1, 100, 1000];
        readonly daily: true;
    };
};
export type CaseKey = keyof typeof CASE_DEFINITIONS;
export interface ActivityCaseSummary {
    key: string;
    name: string;
    imageName: string;
    price: number;
    rewards: number[];
    daily: boolean;
    available: boolean;
    openedToday: boolean;
    secondsUntilReset: number;
    nextResetAt: string | null;
    opensCount: number;
}
export interface RecentCaseSpin {
    id: number;
    userId: string;
    displayName: string;
    caseKey: string;
    caseName: string;
    imageName: string;
    reward: number;
    cost: number;
    createdAt: string;
}
export type CaseOpenResult = {
    success: true;
    openId: number;
    caseKey: string;
    caseName: string;
    reward: number;
    price: number;
    balance: number;
    secondsUntilReset: number;
    nextResetAt: string | null;
} | {
    success: false;
    reason: 'cooldown' | 'insufficient_balance' | 'invalid_case';
    caseKey: string;
    balance?: number;
    requiredPrice?: number;
    secondsUntilReset?: number;
    nextResetAt?: string | null;
};
export type RevealCaseOpenResult = {
    success: true;
    alreadyLogged: boolean;
    caseName: string;
    reward: number;
    cost: number;
} | {
    success: false;
    reason: 'not_found';
};
export declare function getMskDayKey(date?: Date): string;
export declare function getNextMskMidnight(date?: Date): Date;
export declare function getSecondsUntilMskMidnight(date?: Date): number;
export declare function getCaseCatalog(userId: string): Promise<ActivityCaseSummary[]>;
export declare function getRecentCaseSpins(limit?: number): Promise<RecentCaseSpin[]>;
export declare function openCase(params: {
    userId: string;
    caseKey: string;
    displayName: string;
}): Promise<CaseOpenResult>;
export declare function getFreeCaseStatus(userId: string): Promise<ActivityCaseSummary>;
export declare function revealCaseOpen(openId: number, userId: string): Promise<RevealCaseOpenResult>;
export declare function getCaseOpenById(openId: number, userId: string): Promise<CaseOpen | null>;
export type PrivilegeTier = 'premium' | 'deluxe' | 'diamond';
export interface PrivilegeRewardStatus {
    tier: PrivilegeTier;
    coins: number;
    available: boolean;
    claimedToday: boolean;
    secondsUntilReset: number;
    nextResetAt: string;
}
export type PrivilegeClaimResult = {
    success: true;
    tier: PrivilegeTier;
    coins: number;
    balance: number;
    secondsUntilReset: number;
    nextResetAt: string;
} | {
    success: false;
    reason: 'cooldown' | 'no_privilege';
    secondsUntilReset?: number;
    nextResetAt?: string;
};
export declare function getPrivilegeRewardStatus(userId: string, tier: PrivilegeTier): Promise<PrivilegeRewardStatus>;
export declare function claimPrivilegeReward(params: {
    userId: string;
    displayName: string;
    tier: PrivilegeTier;
}): Promise<PrivilegeClaimResult>;
//# sourceMappingURL=caseService.d.ts.map