export interface EmojiItem {
    id: string;
    name: string;
    category: string;
    path: string;
    size: number;
    mimeType: string;
    createdAt: Date;
    tags: string[];
}
export interface Category {
    id: string;
    name: string;
    description?: string;
    emojiCount: number;
    createdAt: Date;
}
export interface EmojiSearchOptions {
    keyword?: string;
    category?: string;
    tags?: string[];
    limit?: number;
    offset?: number;
}
export interface CategorySearchOptions {
    keyword?: string;
    limit?: number;
    offset?: number;
}
export interface TagInfo {
    name: string;
    usage: number;
}
export interface TagSearchOptions {
    keyword?: string;
    limit?: number;
    offset?: number;
}
export interface PaginatedResult<T> {
    items: T[];
    total: number;
    limit: number;
    offset: number;
}
export interface EmojiAddOptions {
    name: string;
    category?: string;
    tags?: string[];
    description?: string;
    imageData?: string;
}
export interface AICategorizeResult {
    category: string;
    confidence: number;
    reason: string;
    newCategory?: string;
}
export interface AIAnalyzeResult {
    name: string;
    category: string;
    tags: string[];
    description: string;
    newCategory?: string;
}
export interface AITaskDetail {
    id: string;
    emojiId: string;
    name?: string;
    status: 'pending' | 'processing' | 'succeeded' | 'failed';
    error?: string;
    createdAt: number;
}
/**
 * Options for importing emojis from a local folder
 */
export interface FolderImportOptions {
    folderPath: string;
    useSubfoldersAsCategories: boolean;
    defaultCategory?: string;
    recursive: boolean;
    aiAnalysis: boolean;
    skipExisting: boolean;
}
/**
 * Result of a folder import operation
 */
export interface FolderImportResult {
    success: boolean;
    imported: number;
    skipped: number;
    failed: number;
    errors: string[];
    importedEmojis: EmojiItem[];
}
/**
 * Information about a scanned folder
 */
export interface FolderScanResult {
    folderPath: string;
    files: ScannedFile[];
    subfolders: string[];
    totalFiles: number;
}
/**
 * Information about a scanned file
 */
export interface ScannedFile {
    path: string;
    name: string;
    category: string;
    size: number;
}
/**
 * 图片内容类型（用于过滤无用图片）
 */
export type ImageContentType = 'emoji' | 'sticker' | 'meme' | 'comic' | 'anime' | 'pet' | 'food' | 'scenery' | 'selfie' | 'screenshot_system' | 'screenshot_game' | 'screenshot_chat' | 'screenshot_video' | 'screenshot_web' | 'photo_people' | 'photo_product' | 'artwork' | 'text_only' | 'qrcode' | 'advertisement' | 'document' | 'diagram' | 'news' | 'logo' | 'nsfw' | 'low_quality' | 'other';
/**
 * 所有可用的图片类型列表
 */
export declare const IMAGE_CONTENT_TYPES: {
    type: ImageContentType;
    label: string;
    description: string;
}[];
/**
 * 默认接受的图片类型（适合作为表情包的类型）
 */
export declare const DEFAULT_ACCEPTED_IMAGE_TYPES: ImageContentType[];
/**
 * AI 图片类型过滤结果
 */
export interface AIImageFilterResult {
    imageType: ImageContentType;
    isAcceptable: boolean;
    confidence: number;
    reason: string;
}
declare module '@koishijs/console' {
    interface Events {
        'emojiluna/getEmojiList': (options?: EmojiSearchOptions) => Promise<EmojiItem[]>;
        'emojiluna/getEmojiPage': (options?: EmojiSearchOptions) => Promise<PaginatedResult<EmojiItem>>;
        'emojiluna/searchEmoji': (keyword: string) => Promise<EmojiItem[]>;
        'emojiluna/getCategories': () => Promise<Category[]>;
        'emojiluna/getCategoriesPage': (options?: CategorySearchOptions) => Promise<PaginatedResult<Category>>;
        'emojiluna/getAllTags': () => Promise<string[]>;
        'emojiluna/getTagsPage': (options?: TagSearchOptions) => Promise<PaginatedResult<TagInfo>>;
        'emojiluna/updateEmojiName': (id: string, name: string) => Promise<boolean>;
        'emojiluna/updateEmojiTags': (id: string, tags: string[]) => Promise<boolean>;
        'emojiluna/updateEmojiCategory': (id: string, category: string) => Promise<boolean>;
        'emojiluna/deleteEmoji': (id: string) => Promise<boolean>;
        'emojiluna/addCategory': (name: string, description: string) => Promise<Category>;
        'emojiluna/deleteCategory': (id: string) => Promise<boolean>;
        'emojiluna/cleanupEmptyCategories': () => Promise<number>;
        'emojiluna/cleanupEmptyTags': () => Promise<number>;
        'emojiluna/addEmoji': (emojiData: EmojiAddOptions) => Promise<EmojiItem>;
        'emojiluna/getBaseUrl': () => Promise<string>;
        'emojiluna/getUploadToken': () => Promise<string>;
        'emojiluna/analyzeEmoji': (emojiId: string) => Promise<{
            success: boolean;
            updates?: string[];
            result?: AIAnalyzeResult;
            oldData?: {
                name: string;
                category: string;
                tags: string[];
            };
            newData?: {
                name: string;
                category: string;
                tags: string[];
                description: string;
            };
            message?: string;
        }>;
        'emojiluna/addEmojis': (emojis: EmojiAddOptions[], aiAnalysis: boolean) => Promise<EmojiItem[]>;
        'emojiluna/getAiTasksAll': () => Promise<AITaskDetail[]>;
        'emojiluna/deleteAiTask': (emojiId: string) => Promise<void>;
        'emojiluna/retryAiTask': (emojiId: string) => Promise<void>;
        'emojiluna/scanFolder': (folderPath: string) => Promise<FolderScanResult>;
        'emojiluna/importFromFolder': (options: FolderImportOptions) => Promise<FolderImportResult>;
    }
}
