/**
 * Daily Quest System
 *
 * Generates and tracks daily quests for player engagement.
 * Players receive 3 quests daily (easy/medium/hard) that award diamonds on completion.
 *
 * Database Tables:
 * - daily_quest_templates: Quest definitions (type, description, requirements, rewards)
 * - player_daily_quests: Player's assigned quests with progress tracking
 */
export type QuestType = 'talk_to_characters' | 'buy_item' | 'attend_class' | 'socialize' | 'work_hours' | 'go_on_date' | 'complete_activities' | 'study' | 'spend_energy' | 'earn_money' | 'increase_affinity';
export type QuestDifficulty = 'easy' | 'medium' | 'hard';
export interface QuestTemplate {
    type: QuestType;
    desc: string;
    required: number;
    reward: number;
    difficulty: QuestDifficulty;
    energy: number;
    icon: string;
}
export interface ActiveQuest {
    id: string;
    questType: QuestType;
    description: string;
    progress: number;
    progressRequired: number;
    diamondReward: number;
    difficulty: QuestDifficulty;
    iconName: string;
    completed: boolean;
    completedDate?: string;
    justCompleted?: boolean;
}
export interface QuestReward {
    diamonds: number;
    energy: number | null;
    money: number | null;
}
export interface FormattedQuest {
    id: string;
    name: string;
    description: string;
    category: string;
    reward: QuestReward;
    progress: number;
    target: number;
    completed: boolean;
    claimed: boolean;
}
export interface QuestStatistics {
    totalCompleted: number;
    totalDiamondsEarned: number;
    daysWithQuests: number;
    byDifficulty: Record<string, number>;
}
export interface ClaimQuestResult {
    success: boolean;
    message: string;
    reward: QuestReward | null;
}
interface DiamondAwardPlayer {
    userId?: string;
    c?: {
        diamonds?: number;
    };
    character?: {
        diamonds?: number;
    };
}
/**
 * Enable database storage for quests
 */
export declare function enableDatabaseStorage(): void;
/**
 * Disable database storage (use in-memory fallback)
 */
export declare function disableDatabaseStorage(): void;
/**
 * Ensure daily quest tables exist and normalize legacy column names.
 */
export declare function ensureDailyQuestTables(): Promise<void>;
/**
 * Initialize quest templates in database.
 * Called during server startup.
 */
export declare function initializeQuestTemplates(): Promise<void>;
/**
 * Get quest template by type
 */
export declare function getQuestTemplate(type: QuestType): QuestTemplate | undefined;
/**
 * Assign 3 random quests to player each day (1 easy, 1 medium, 1 hard).
 * Called at midnight or on first login of the day.
 */
export declare function generateDailyQuests(playerId: string): Promise<ActiveQuest[]>;
/**
 * Update progress on quest of given type.
 * Called after relevant player actions.
 */
export declare function updateQuestProgress(playerId: string, questType: QuestType, amount?: number, player?: DiamondAwardPlayer): Promise<ActiveQuest | null>;
/**
 * Get player's current daily quests
 */
export declare function getActiveQuests(playerId: string): Promise<ActiveQuest[]>;
/**
 * Format quest data to match iOS DailyQuest model
 */
export declare function formatQuestForClient(quest: ActiveQuest): FormattedQuest;
/**
 * Claim reward for a completed quest
 */
export declare function claimQuestReward(playerId: string, questId: string, player?: DiamondAwardPlayer): Promise<ClaimQuestResult>;
/**
 * Get player's quest completion statistics
 */
export declare function getQuestStatistics(playerId: string): Promise<QuestStatistics>;
/**
 * Handle daily quest check (WebSocket handler)
 * Called when player connects to server or at midnight.
 */
export declare function handleDailyQuestCheck(playerId: string, sendToClient: (playerId: string, message: Record<string, unknown>) => void): Promise<void>;
/**
 * Clear player quests (for testing or new game)
 */
export declare function clearPlayerQuests(playerId: string): void;
/**
 * Clear all quests (for testing)
 */
export declare function clearAllQuests(): void;
/**
 * Get all quest templates
 */
export declare function getAllQuestTemplates(): QuestTemplate[];
/**
 * Check if database storage is enabled
 */
export declare function isDatabaseStorageEnabled(): boolean;
export {};
//# sourceMappingURL=dailyQuests.d.ts.map