export interface UserProfile {
    id: string;
    displayName: string;
    avatarUrl: string;
    bio: string;
    joinedAt: number;
    badges: Badge[];
    stats: UserStats;
    socialLinks: SocialLink[];
    privacy: PrivacySettings;
}
export interface Badge {
    id: string;
    name: string;
    icon: string;
    description: string;
    earnedAt: number;
}
export interface UserStats {
    gamesPublished: number;
    gamesPlayed: number;
    totalPlayTimeMs: number;
    assetsShared: number;
    ratingsGiven: number;
    followersCount: number;
    followingCount: number;
    jamParticipations: number;
}
export interface SocialLink {
    platform: 'github' | 'twitter' | 'youtube' | 'discord' | 'website' | 'itch';
    url: string;
}
export interface PrivacySettings {
    profilePublic: boolean;
    showActivity: boolean;
    allowMessages: boolean;
    showOnlineStatus: boolean;
}
export type AssetCategory = 'sprites' | 'tilesets' | 'animations' | 'audio-sfx' | 'audio-music' | 'fonts' | 'ui-themes' | 'templates' | 'scripts' | 'shaders' | 'models-3d' | 'particles' | 'complete-projects';
export type AssetLicense = 'free' | 'cc0' | 'cc-by' | 'cc-by-sa' | 'cc-by-nc' | 'commercial' | 'custom';
export interface MarketplaceAsset {
    id: string;
    name: string;
    description: string;
    authorId: string;
    category: AssetCategory;
    tags: string[];
    license: AssetLicense;
    version: string;
    price: number;
    currency: string;
    thumbnailUrl: string;
    previewUrls: string[];
    downloadCount: number;
    rating: number;
    ratingCount: number;
    fileSize: number;
    createdAt: number;
    updatedAt: number;
    compatibility: string[];
}
export interface MarketplaceQuery {
    search?: string;
    category?: AssetCategory;
    tags?: string[];
    license?: AssetLicense;
    priceMin?: number;
    priceMax?: number;
    sortBy: 'relevance' | 'newest' | 'popular' | 'rating' | 'price-asc' | 'price-desc';
    page: number;
    pageSize: number;
}
export interface MarketplaceResult {
    assets: MarketplaceAsset[];
    total: number;
    page: number;
    pageSize: number;
}
export declare function createMarketplaceQuery(partial?: Partial<MarketplaceQuery>): MarketplaceQuery;
export type GameVisibility = 'public' | 'unlisted' | 'private' | 'draft';
export type ContentRating = 'everyone' | 'teen' | 'mature';
export interface PublishedGame {
    id: string;
    title: string;
    slug: string;
    authorId: string;
    description: string;
    shortDescription: string;
    thumbnailUrl: string;
    coverImageUrl: string;
    screenshotUrls: string[];
    visibility: GameVisibility;
    contentRating: ContentRating;
    genre: string[];
    tags: string[];
    version: string;
    engineVersion: string;
    playCount: number;
    likeCount: number;
    commentCount: number;
    rating: number;
    ratingCount: number;
    createdAt: number;
    updatedAt: number;
    publishedAt: number;
    controls: ControlSchemeInfo;
    features: GameFeature[];
    minPlayers: number;
    maxPlayers: number;
    embeddable: boolean;
    remixable: boolean;
    sourceGameId?: string;
}
export type GameFeature = 'multiplayer' | 'mobile' | 'controller' | 'achievements' | 'leaderboards' | 'cloud-save' | 'vr' | 'ar';
export interface ControlSchemeInfo {
    keyboard: boolean;
    mouse: boolean;
    touch: boolean;
    gamepad: boolean;
    vr: boolean;
}
export interface PublishConfig {
    title: string;
    description: string;
    visibility: GameVisibility;
    contentRating: ContentRating;
    genre: string[];
    tags: string[];
    controls: ControlSchemeInfo;
    remixable: boolean;
    minPlayers: number;
    maxPlayers: number;
}
export interface Comment {
    id: string;
    authorId: string;
    targetId: string;
    targetType: 'game' | 'asset';
    text: string;
    createdAt: number;
    updatedAt: number;
    likes: number;
    parentId?: string;
    isEdited: boolean;
    isPinned: boolean;
}
export interface Rating {
    authorId: string;
    targetId: string;
    targetType: 'game' | 'asset';
    score: number;
    review?: string;
    createdAt: number;
}
export interface RatingAggregate {
    targetId: string;
    average: number;
    count: number;
    distribution: [number, number, number, number, number];
}
export declare function computeRatingAggregate(ratings: Rating[]): RatingAggregate;
export type JamPhase = 'upcoming' | 'submission' | 'voting' | 'results' | 'archived';
export interface GameJam {
    id: string;
    title: string;
    description: string;
    theme?: string;
    hostId: string;
    startDate: number;
    endDate: number;
    votingEndDate: number;
    phase: JamPhase;
    rules: string;
    prizes: JamPrize[];
    categories: JamCategory[];
    participants: number;
    submissions: number;
    maxTeamSize: number;
    allowLateSubmission: boolean;
    featured: boolean;
}
export interface JamPrize {
    place: number;
    description: string;
    value?: string;
}
export interface JamCategory {
    name: string;
    description: string;
    weight: number;
}
export interface JamSubmission {
    id: string;
    jamId: string;
    gameId: string;
    teamName: string;
    teamMembers: string[];
    submittedAt: number;
    description: string;
    scores: JamScore[];
    rank?: number;
    finalScore?: number;
}
export interface JamScore {
    category: string;
    score: number;
    voterId: string;
}
export declare function computeJamPhase(jam: GameJam, now: number): JamPhase;
export declare function computeJamResults(submissions: JamSubmission[], categories: JamCategory[]): JamSubmission[];
export interface FeaturedCollection {
    id: string;
    title: string;
    description: string;
    gameIds: string[];
    curatedBy: string;
    createdAt: number;
    displayOrder: number;
}
export interface DiscoveryFeed {
    featured: FeaturedCollection[];
    trending: string[];
    newReleases: string[];
    topRated: string[];
    staffPicks: string[];
    forYou: string[];
}
export interface GameRecommendation {
    gameId: string;
    score: number;
    reason: 'similar-genre' | 'same-author' | 'played-similar' | 'trending' | 'friends-playing';
}
/** Simple content-based recommendation by genre/tag overlap. */
export declare function recommendGames(userPlayedGames: PublishedGame[], allGames: PublishedGame[], limit?: number): GameRecommendation[];
export type NotificationType = 'comment' | 'rating' | 'follow' | 'jam-start' | 'jam-result' | 'game-feature' | 'asset-review' | 'system' | 'achievement';
export interface UserNotification {
    id: string;
    userId: string;
    type: NotificationType;
    title: string;
    message: string;
    link?: string;
    read: boolean;
    createdAt: number;
}
