export interface MangaSource { id: string; name: string; lang?: string; displayName?: string; } export interface MangaSearchItem { id: string; sourceId: string; sourceName: string; title: string; cover: string; description?: string; author?: string; status?: string; artist?: string; genre?: string; } export interface MangaSearchFailure { sourceId: string; sourceName: string; error: string; } export interface MangaSearchResult { results: MangaSearchItem[]; failedSources: MangaSearchFailure[]; } export type MangaRecommendType = 'POPULAR' | 'LATEST'; export interface MangaRecommendResult { mangas: MangaSearchItem[]; hasNextPage: boolean; } export interface MangaChapter { id: string; mangaId: string; name: string; chapterNumber?: number; scanlator?: string; isRead?: boolean; isDownloaded?: boolean; pageCount?: number; uploadDate?: number; } export interface MangaDetail extends MangaSearchItem { chapters: MangaChapter[]; } export interface MangaShelfItem { title: string; cover: string; sourceId: string; sourceName: string; mangaId: string; saveTime: number; description?: string; author?: string; status?: string; lastChapterId?: string; lastChapterName?: string; latestChapterId?: string; latestChapterName?: string; latestChapterCount?: number; unreadChapterCount?: number; } export interface MangaReadRecord { title: string; cover: string; sourceId: string; sourceName: string; mangaId: string; chapterId: string; chapterName: string; pageIndex: number; pageCount: number; saveTime: number; }