/**
 * Achievement System
 *
 * Tracks and unlocks achievements based on player actions.
 * Includes 40+ achievements across multiple categories.
 *
 * Ported from Python: ws/retention/achievements.py
 */
export type AchievementCategory = 'life_milestone' | 'career' | 'relationship' | 'collection' | 'secret';
export interface AchievementDefinition {
    key: string;
    name: string;
    desc: string;
    category: AchievementCategory;
    reward: number;
    icon: string;
    hidden: boolean;
}
export interface UnlockedAchievement {
    id: string;
    key: string;
    name: string;
    description: string;
    icon: string;
    reward: number;
    unlockedAt?: Date;
}
export interface PlayerAchievements {
    unlocked: UnlockedAchievement[];
    locked: AchievementDefinition[];
    totalCount: number;
    unlockedCount: number;
    progressPercent: number;
}
export interface PlayerStats {
    lifetimeEarnings?: number;
    lifetimeSpending?: number;
    jobCount?: number;
    childrenCount?: number;
    friendsCount?: number;
    peopleDated?: number;
    timesFired?: number;
    yearsMarried?: number;
    everMarried?: boolean;
    marriageCount?: number;
}
export interface EventData {
    level?: string;
    gpa?: number;
    title?: string;
    age?: number;
    affinity?: number;
    hours?: number;
    performance?: number;
    amount?: number;
    [key: string]: unknown;
}
interface DiamondAwardPlayer {
    userId?: string;
    c?: {
        diamonds?: number;
    };
    character?: {
        diamonds?: number;
    };
}
export declare const ACHIEVEMENT_DEFINITIONS: AchievementDefinition[];
/**
 * Initialize achievements table and insert definitions
 */
export declare function initializeAchievements(): Promise<void>;
/**
 * Get achievement definition by key
 */
export declare function getAchievementByKey(key: string): AchievementDefinition | undefined;
/**
 * Check if player has unlocked an achievement (database + cache)
 */
export declare function hasUnlockedAchievementAsync(playerId: string, achievementKey: string): Promise<boolean>;
/**
 * Synchronous check using cache only
 */
export declare function hasUnlockedAchievement(playerId: string, achievementKey: string): boolean;
/**
 * Unlock an achievement for a player (with database persistence)
 */
export declare function unlockAchievementAsync(playerId: string, achievementKey: string, player?: DiamondAwardPlayer): Promise<UnlockedAchievement | null>;
/**
 * Synchronous unlock using cache only (for backwards compatibility)
 */
export declare function unlockAchievement(playerId: string, achievementKey: string, player?: DiamondAwardPlayer): UnlockedAchievement | null;
/**
 * Check if achievement should be unlocked and unlock it (async version)
 */
export declare function checkAndUnlockAsync(playerId: string, achievementKey: string, player?: DiamondAwardPlayer): Promise<UnlockedAchievement[]>;
/**
 * Check if achievement should be unlocked and unlock it (sync version)
 */
export declare function checkAndUnlock(playerId: string, achievementKey: string, player?: DiamondAwardPlayer): UnlockedAchievement[];
/**
 * Check achievements based on event type and data
 */
export declare function checkAchievements(playerId: string, eventType: string, eventData?: EventData, playerData?: {
    age?: number;
    money?: number;
    prestige?: number;
    itemCount?: number;
}, stats?: PlayerStats, player?: DiamondAwardPlayer): UnlockedAchievement[];
/**
 * Async version of checkAchievements with database persistence
 */
export declare function checkAchievementsAsync(playerId: string, eventType: string, eventData?: EventData, playerData?: {
    age?: number;
    money?: number;
    prestige?: number;
    itemCount?: number;
}, stats?: PlayerStats, player?: DiamondAwardPlayer): Promise<UnlockedAchievement[]>;
/**
 * Get all achievements and player's progress (async with database)
 */
export declare function getPlayerAchievementsAsync(playerId: string): Promise<PlayerAchievements>;
/**
 * Get all achievements and player's progress (sync using cache)
 */
export declare function getPlayerAchievements(playerId: string): PlayerAchievements;
/**
 * Get achievements by category
 */
export declare function getAchievementsByCategory(category: AchievementCategory): AchievementDefinition[];
/**
 * Load player achievements from database into cache
 */
export declare function loadPlayerAchievements(playerId: string): Promise<void>;
/**
 * Clear player achievements (for testing or new game)
 */
export declare function clearPlayerAchievements(playerId: string): void;
/**
 * Clear player achievements from database
 */
export declare function clearPlayerAchievementsAsync(playerId: string): Promise<void>;
/**
 * Clear all achievements (for testing)
 */
export declare function clearAllAchievements(): void;
/**
 * Get total diamond reward for a list of achievements
 */
export declare function calculateTotalReward(achievements: UnlockedAchievement[]): number;
/**
 * Get achievement progress summary for a player
 */
export declare function getAchievementSummary(playerId: string): {
    total: number;
    unlocked: number;
    byCategory: Record<AchievementCategory, {
        total: number;
        unlocked: number;
    }>;
};
export {};
//# sourceMappingURL=achievements.d.ts.map