import type { AvatarProps } from '@nuxt/ui'

export type UserStatus = 'subscribed' | 'unsubscribed' | 'bounced'
export type SaleStatus = 'paid' | 'failed' | 'refunded'

export interface User {
  id: number
  name: string
  email: string
  avatar?: AvatarProps
  status: UserStatus
  location: string
}

export interface Mail {
  id: number
  unread?: boolean
  from: User
  subject: string
  body: string
  date: string
}

export interface Member {
  name: string
  username: string
  role: 'member' | 'owner'
  avatar: AvatarProps
}

export interface Stat {
  title: string
  icon: string
  value: number | string
  variation: number
  formatter?: (value: number) => string
}

export interface Sale {
  id: string
  date: string
  status: SaleStatus
  email: string
  amount: number
}

export interface Notification {
  id: number
  unread?: boolean
  sender: User
  body: string
  date: string
}

export type Period = 'daily' | 'weekly' | 'monthly'

export interface Range {
  start: Date
  end: Date
}

// WebNovel types
export type NovelStatus = 'ongoing' | 'completed' | 'hiatus'
export type NovelGenre = 'fantasy' | 'romance' | 'sci-fi' | 'mystery' | 'slice-of-life' | 'action' | 'adventure' | 'horror' | 'comedy' | 'drama'

export interface Author {
  id: string
  name: string
  avatar: string
  bio?: string
}

export interface WebNovel {
  id: string
  slug: string
  title: string
  author: Author
  description: string
  cover: string
  status: NovelStatus
  genres: NovelGenre[]
  rating: number
  views: number
  followers: number
  chapters: number
  language: string
  tags: string[]
  createdAt: string
  updatedAt: string
}

export interface Chapter {
  id: string
  novelId: string
  number: number
  title: string
  content: string
  views: number
  likes: number
  createdAt: string
  updatedAt: string
}

export interface ReadingProgress {
  novelId: string
  chapterId: string
  chapterNumber: number
  progress: number // 0-100
  lastReadAt: string
}

export interface ReaderPreferences {
  fontSize: number // 12-24
  fontFamily: 'serif' | 'sans-serif' | 'monospace'
  lineHeight: number // 1.5-2.5
  backgroundColor: 'white' | 'cream' | 'gray' | 'black'
  textColor: 'black' | 'white' | 'gray'
  theme: 'light' | 'dark' | 'sepia'
  textJustify: boolean
}
