package dev.kaizen.app.ui.icon

import androidx.compose.ui.graphics.vector.ImageVector
import com.composables.icons.lucide.*

/**
 * Central icon registry for the entire app. Every UI component references icons
 * through this object — never directly from Material, Lucide, or any other
 * library. This gives us:
 *
 * 1. **One-line swap**: change the backing icon here, every usage updates
 * 2. **Library independence**: migrate from Lucide to custom SVGs gradually
 * 3. **Semantic naming**: `KaizenIcons.Send` not `Icons.Rounded.Send`
 * 4. **Brand layer**: the [Custom] section holds hand-drawn Kaizen originals
 *    that override the base library for brand-critical touchpoints
 *
 * Convention: group by function, alphabetize within groups.
 * When adding a custom icon, keep the Lucide fallback as a comment.
 */
object KaizenIcons {

    // ── Navigation ──────────────────────────────────────────────────────────
    val ArrowLeft: ImageVector get()     = Lucide.ArrowLeft
    val ChevronDown: ImageVector get()   = Lucide.ChevronDown
    val ChevronLeft: ImageVector get()   = Lucide.ChevronLeft
    val ChevronRight: ImageVector get()  = Lucide.ChevronRight
    val ChevronUp: ImageVector get()     = Lucide.ChevronUp
    val Menu: ImageVector get()          = KaizenCustomIcons.Menu
    val MoreVertical: ImageVector get()  = Lucide.EllipsisVertical
    val Settings: ImageVector get()      = Lucide.Settings
    val X: ImageVector get()             = Lucide.X

    // ── Chat ────────────────────────────────────────────────────────────────
    val Mic: ImageVector get()           = KaizenCustomIcons.Mic
    val Paperclip: ImageVector get()     = Lucide.Paperclip
    val AudioLines: ImageVector get()     = KaizenCustomIcons.AudioLines
    val Plus: ImageVector get()          = KaizenCustomIcons.Plus
    val Send: ImageVector get()          = Lucide.SendHorizontal
    val Sparkles: ImageVector get()      = Lucide.Sparkles
    val Square: ImageVector get()        = Lucide.Square
    val Zap: ImageVector get()           = Lucide.Zap

    // ── Modes ───────────────────────────────────────────────────────────────
    val Brain: ImageVector get()         = Lucide.Brain
    val CircleDot: ImageVector get()     = Lucide.CircleDot
    val Globe: ImageVector get()         = KaizenCustomIcons.Globe
    val Image: ImageVector get()         = KaizenCustomIcons.ImageIcon
    val Music: ImageVector get()         = Lucide.Music
    val SlidersHorizontal: ImageVector get() = KaizenCustomIcons.SlidersHorizontal
    val Video: ImageVector get()         = Lucide.Video

    // ── Conversation management ─────────────────────────────────────────────
    val Check: ImageVector get()         = Lucide.Check
    val ClipboardCopy: ImageVector get() = Lucide.ClipboardCopy
    val Copy: ImageVector get()          = Lucide.Copy
    val Lock: ImageVector get()          = Lucide.Lock
    val LockOpen: ImageVector get()      = Lucide.LockOpen
    val Pencil: ImageVector get()        = Lucide.Pencil
    val PenLine: ImageVector get()       = Lucide.PenLine
    val Pin: ImageVector get()           = Lucide.Pin
    val PinOff: ImageVector get()        = Lucide.PinOff
    val RefreshCw: ImageVector get()     = Lucide.RefreshCw
    val RotateCcw: ImageVector get()     = Lucide.RotateCcw
    val SquarePen: ImageVector get()     = Lucide.SquarePen
    val Star: ImageVector get()          = Lucide.Star
    val StarOff: ImageVector get()       = Lucide.StarOff
    val Trash: ImageVector get()         = Lucide.Trash2

    // ── Files & media ───────────────────────────────────────────────────────
    val Camera: ImageVector get()        = Lucide.Camera
    val Code: ImageVector get()          = Lucide.Code
    val File: ImageVector get()          = Lucide.File
    val FileAudio: ImageVector get()     = Lucide.FileAudio
    val FileText: ImageVector get()      = Lucide.FileText
    val FileVideo: ImageVector get()     = Lucide.FileVideo
    val FileImage: ImageVector get()     = Lucide.FileImage

    // ── Search & reasoning ──────────────────────────────────────────────────
    val Search: ImageVector get()        = Lucide.Search
    val ExternalLink: ImageVector get()  = Lucide.ExternalLink
    val Wrench: ImageVector get()        = Lucide.Wrench
    val AlertCircle: ImageVector get()   = Lucide.CircleAlert

    // ── Settings ────────────────────────────────────────────────────────────
    val Fingerprint: ImageVector get()   = Lucide.Fingerprint
    val Key: ImageVector get()           = Lucide.Key
    val Languages: ImageVector get()     = Lucide.Languages
    val LogOut: ImageVector get()        = Lucide.LogOut
    val Monitor: ImageVector get()       = Lucide.Monitor
    val Moon: ImageVector get()          = Lucide.Moon
    val Palette: ImageVector get()       = Lucide.Palette
    val Smartphone: ImageVector get()    = Lucide.Smartphone
    val Sun: ImageVector get()           = Lucide.Sun
    val User: ImageVector get()          = Lucide.User

    // ── Scroll ──────────────────────────────────────────────────────────────
    val ArrowDown: ImageVector get()     = Lucide.ArrowDown
    val ArrowUp: ImageVector get()       = Lucide.ArrowUp

    // ── Audio / Call ────────────────────────────────────────────────────────
    val Volume2: ImageVector get()       = Lucide.Volume2
    val PhoneOff: ImageVector get()      = Lucide.PhoneOff

    // ── Custom (brand overrides) ────────────────────────────────────────────
    // Add hand-drawn SVGs here as ImageVector literals when ready.
    // Example:
    //   val Send: ImageVector get() = KaizenCustomIcons.Send
    // The Lucide fallback above is then removed.
}
