import type { Locale } from '../i18n/I18n';
/** Age group brackets */
export type AgeGroup = '6-8' | '9-11' | '12-14' | '15+';
/** Kid-mode difficulty presets */
export type KidDifficulty = 'explorer' | 'creator' | 'inventor' | 'master';
/** Visual block categories (Scratch-inspired) */
export type BlockCategory = 'motion' | 'looks' | 'events' | 'control' | 'sensing' | 'operators' | 'variables' | 'sounds';
/** A visual programming block */
export interface VisualBlock {
    id: string;
    category: BlockCategory;
    /** Emoji icon for the block */
    emoji: string;
    /** Block label per locale */
    label: Partial<Record<Locale, string>>;
    /** Description per locale */
    description: Partial<Record<Locale, string>>;
    /** Parameters this block accepts */
    params: BlockParam[];
    /** What this block generates (engine code concept) */
    generatesAction: string;
    /** Minimum age group */
    minAge: AgeGroup;
}
/** Parameter on a visual block */
export interface BlockParam {
    name: string;
    type: 'number' | 'string' | 'dropdown' | 'color' | 'entity' | 'boolean';
    /** Label per locale */
    label: Partial<Record<Locale, string>>;
    defaultValue: string | number | boolean;
    /** For dropdown: available options */
    options?: Array<{
        value: string;
        label: Partial<Record<Locale, string>>;
    }>;
    /** Min/max for number params */
    min?: number;
    max?: number;
}
/** Sprite library item for kids */
export interface KidSprite {
    id: string;
    name: Partial<Record<Locale, string>>;
    /** Category for browsing */
    category: 'animals' | 'people' | 'vehicles' | 'nature' | 'food' | 'fantasy' | 'space' | 'sports' | 'buildings' | 'effects';
    /** Emoji preview */
    emoji: string;
    /** Asset URL pattern */
    assetPath: string;
    /** Number of animation frames */
    frameCount: number;
    /** Safe for all ages */
    ageAppropriate: AgeGroup;
    /** Tags for search */
    tags: string[];
}
/** Gamification badge */
export interface KidBadge {
    id: string;
    emoji: string;
    name: Partial<Record<Locale, string>>;
    description: Partial<Record<Locale, string>>;
    /** Condition to earn */
    condition: BadgeCondition;
}
export type BadgeCondition = {
    type: 'tutorials_completed';
    count: number;
} | {
    type: 'games_created';
    count: number;
} | {
    type: 'blocks_used';
    count: number;
} | {
    type: 'days_active';
    count: number;
} | {
    type: 'quiz_score';
    minPercent: number;
} | {
    type: 'custom';
    id: string;
};
/** Kid profile / progress */
export interface KidProfile {
    name: string;
    avatarEmoji: string;
    ageGroup: AgeGroup;
    locale: Locale;
    stars: number;
    streak: number;
    lastActiveDate: string;
    earnedBadges: string[];
    completedTutorials: string[];
    createdProjects: string[];
    totalBlocksUsed: number;
    totalPlayTime: number;
}
/** Parent dashboard settings */
export interface ParentConfig {
    /** Maximum play time per day (minutes). 0 = unlimited */
    dailyTimeLimitMinutes: number;
    /** Allow sharing creations online */
    allowSharing: boolean;
    /** Content filter level */
    contentFilter: 'strict' | 'moderate' | 'off';
    /** Enable chat in classroom mode */
    allowChat: boolean;
    /** Required password for settings access */
    settingsPin: string;
    /** Allowed categories for sprites */
    allowedSpriteCategories: KidSprite['category'][];
    /** Enable sound effects */
    enableSounds: boolean;
}
/** Classroom mode config */
export interface ClassroomConfig {
    /** Class name */
    className: string;
    /** Teacher name */
    teacherName: string;
    /** Students in the class */
    students: KidProfile[];
    /** Currently assigned tutorial */
    currentAssignment?: string;
    /** Due date for assignment */
    dueDate?: string;
    /** Show leaderboard */
    showLeaderboard: boolean;
    /** Allow peer collaboration */
    allowCollaboration: boolean;
}
export interface KidModeConfig {
    enabled: boolean;
    ageGroup: AgeGroup;
    parentConfig: ParentConfig;
    classroom?: ClassroomConfig;
}
export declare const DEFAULT_KID_MODE_CONFIG: KidModeConfig;
export declare class KidModeManager {
    private config;
    private profile;
    private sessionStartTime;
    private sessionPlayTime;
    private readonly storageKey;
    constructor(config?: Partial<KidModeConfig>);
    isEnabled(): boolean;
    enable(ageGroup?: AgeGroup): void;
    disable(): void;
    getAgeGroup(): AgeGroup;
    setAgeGroup(age: AgeGroup): void;
    getProfile(): KidProfile | null;
    createProfile(name: string, avatarEmoji: string, ageGroup: AgeGroup, locale: Locale): KidProfile;
    /** Award stars (gamification) */
    awardStars(count: number): number;
    /** Check and update streak */
    updateStreak(): number;
    /** Mark tutorial as completed, award stars */
    completeTutorial(tutorialId: string): number;
    /** Check if a badge is earned */
    checkBadge(badge: KidBadge): boolean;
    /** Get remaining play time in minutes. -1 = unlimited. */
    getRemainingTime(): number;
    /** Check if time limit is exceeded */
    isTimeLimitExceeded(): boolean;
    /** Check if a sprite is appropriate for current settings */
    isSpriteAllowed(sprite: KidSprite): boolean;
    /** Filter blocks by age group */
    getAvailableBlocks(allBlocks: VisualBlock[]): VisualBlock[];
    /** Map kid difficulty to engine concepts */
    getDifficultySettings(difficulty: KidDifficulty): KidDifficultySettings;
    getParentConfig(): ParentConfig;
    updateParentConfig(updates: Partial<ParentConfig>): void;
    getClassroom(): ClassroomConfig | undefined;
    setClassroom(classroom: ClassroomConfig): void;
    /** Get leaderboard sorted by stars */
    getLeaderboard(): Array<{
        name: string;
        emoji: string;
        stars: number;
    }>;
    private saveProfile;
    private loadProfile;
    dispose(): void;
}
export interface KidDifficultySettings {
    label: Partial<Record<Locale, string>>;
    emoji: string;
    /** Which block categories are available */
    enabledCategories: BlockCategory[];
    /** Max entities in scene */
    maxEntities: number;
    /** Show code view (advanced toggle) */
    showCodeView: boolean;
    /** Show property inspector */
    showInspector: boolean;
    /** Enable physics */
    enablePhysics: boolean;
    /** Enable scripting */
    enableScripting: boolean;
}
export declare const KID_DIFFICULTY_PRESETS: Record<KidDifficulty, KidDifficultySettings>;
export declare const VISUAL_BLOCKS: VisualBlock[];
export declare const KID_BADGES: KidBadge[];
export declare const KID_SPRITES: KidSprite[];
