export enum VoiceName { Puck = 'Puck', Charon = 'Charon', Kore = 'Kore', Fenrir = 'Fenrir', Zephyr = 'Zephyr', Aoede = 'Aoede', } export enum PlaybackStatus { IDLE = 'IDLE', LOADING_TEXT = 'LOADING_TEXT', LOADING_AUDIO = 'LOADING_AUDIO', READY = 'READY', PLAYING = 'PLAYING', PAUSED = 'PAUSED', ERROR = 'ERROR', COMPLETED = 'COMPLETED' } export interface AudioSegment { id: string; text: string; audioUrl?: string; isLoading: boolean; hasError: boolean; } export interface Article { id: string; url: string; title: string; text: string; segments: AudioSegment[]; currentSegmentIndex: number; status: PlaybackStatus; errorMessage?: string; // New fields for enhanced features summary?: string; summaryAudioUrl?: string; isSummaryLoading?: boolean; complexity?: 'simple' | 'moderate' | 'complex'; wordCount?: number; estimatedReadTime?: number; // in minutes addedAt?: number; // timestamp fromRssFeed?: string; // RSS feed ID if applicable } export interface PlayerState { isPlaying: boolean; playbackRate: number; currentArticleId: string | null; selectedVoice: VoiceName; voiceMood: VoiceMood; smartSpeedEnabled: boolean; } export interface ReaderSettings { isDarkMode: boolean; fontSize: 'sm' | 'base' | 'lg' | 'xl' | '2xl'; lineHeight: 'normal' | 'relaxed' | 'loose'; fontFamily: 'sans' | 'serif' | 'mono'; autoScroll: boolean; readingTone: 'clean' | 'sepia' | 'night'; pageWidth: 'cozy' | 'standard' | 'wide'; zenMode: boolean; } // Voice Moods - preset configurations export type VoiceMood = 'neutral' | 'energetic' | 'calm' | 'professional' | 'bedtime'; export interface VoiceMoodConfig { id: VoiceMood; label: string; emoji: string; description: string; recommendedVoice: VoiceName; recommendedSpeed: number; } // Reading Stats export interface ReadingStats { totalArticlesRead: number; totalMinutesListened: number; totalWordsRead: number; currentStreak: number; // days longestStreak: number; lastReadDate: string; // ISO date string articlesPerDay: Record; // date -> count favoriteVoice: VoiceName; voiceUsage: Record; } // Bookmarks for resume functionality export interface Bookmark { articleId: string; url: string; title: string; segmentIndex: number; savedAt: number; // timestamp progress: number; // 0-100 percentage } // RSS Feed subscriptions export interface RSSFeed { id: string; url: string; title: string; description?: string; lastFetched?: number; articleCount?: number; isActive: boolean; addedAt: number; } export interface RSSArticle { title: string; url: string; description?: string; pubDate?: string; feedId: string; }