
enum PageIcon: String, CaseIterable {

    // MARK: General

    case calendar

    case clockFill = "clock-fill"

    case file

    case globe

    case location

    case poster

    case video

    case bell

    case bellSlash = "bell-slash"

    case pencil

    case personPlus = "person-plus"

    // MARK: Statistics

    case statisticsTime = "time"

    case statisticsElevationUp = "elevation-up"

    case statisticsElevationDown = "elevation-down"

    case statisticsDistance = "distance"

    case statisticsEnergy = "energy"

    case statisticsStopwatch = "stopwatch"

    case statisticsHeart = "heart-pulse"

    case statisticsSpeedometer = "speedometer"

    // MARK: Buttons

    case buttonDownload = "download"

    case buttonExternalLink = "external"

    case buttonGitLink = "git"

    case buttonPlay = "play-circle"

    // MARK: Audio player

    case audioPlayerPlaylist = "playlist"

    case audioPlayerClose = "close"

    case audioPlayerPlay = "play"

    case audioPlayerPause = "pause"

    case audioPlayerPrevious = "previous"

    case audioPlayerNext = "next"

    // MARK: Image compare

    case leftRightArrow = "left-right-arrow"

    var icon: ContentIcon.Type {
        switch self {
        case .statisticsTime: Icon.Statistics.Time.self
        case .statisticsElevationUp: Icon.Statistics.ElevationUp.self
        case .statisticsElevationDown: Icon.Statistics.ElevationDown.self
        case .statisticsDistance: Icon.Statistics.Distance.self
        case .statisticsEnergy: Icon.Statistics.Energy.self
        case .statisticsStopwatch: Icon.Statistics.Stopwatch.self
        case .statisticsHeart: Icon.Statistics.HeartPulse.self
        case .statisticsSpeedometer: Icon.Statistics.Speedometer.self
        case .buttonDownload: Icon.ArrowDown.self
        case .buttonExternalLink: Icon.ArrowRight.self
        case .buttonGitLink: Icon.Git.self
        case .buttonPlay: Icon.Play.self
        case .audioPlayerPlaylist: Icon.AudioPlayer.Playlist.self
        case .audioPlayerClose: Icon.AudioPlayer.Close.self
        case .audioPlayerPlay: Icon.AudioPlayer.Play.self
        case .audioPlayerPause: Icon.AudioPlayer.Pause.self
        case .audioPlayerPrevious: Icon.AudioPlayer.Previous.self
        case .audioPlayerNext: Icon.AudioPlayer.Next.self
        case .calendar: Icon.Calendar.self
        case .clockFill: Icon.ClockFill.self
        case .file: Icon.File.self
        case .globe: Icon.Globe.self
        case .location: Icon.Location.self
        case .poster: Icon.Poster.self
        case .video: Icon.Video.self
        case .leftRightArrow: Icon.LeftRightArrow.self
        case .bell: Icon.Bell.self
        case .bellSlash: Icon.BellSlash.self
        case .pencil: Icon.Pencil.self
        case .personPlus: Icon.PersonPlus.self
        }
    }

    var name: String {
        switch self {
        case .calendar: "Calendar"
        case .clockFill: "ClockFill"
        case .file: "File"
        case .globe: "Globe"
        case .location: "Location"
        case .poster: "Poster"
        case .video: "Video"
        case .bell: "Bell"
        case .bellSlash: "Bell With Slash"
        case .pencil: "Pencil"
        case .personPlus: "Person Plus"
        case .leftRightArrow: "LeftRightArrow"
        case .buttonExternalLink: "Button: External Link"
        case .buttonGitLink: "Button: Git Link"
        case .buttonPlay: "Button: Play"
        case .audioPlayerPlaylist: "Audio Player: Playlist"
        case .audioPlayerClose: "Audio Player: Close"
        case .audioPlayerPlay: "Audio Player: Play"
        case .audioPlayerPause: "Audio Player: Pause"
        case .audioPlayerPrevious: "Audio Player: Previous"
        case .audioPlayerNext: "Audio Player: Next"
        case .buttonDownload: "Button: Download"
        case .statisticsTime: "Clock (Duration)"
        case .statisticsElevationUp: "Arrow Up (Elevation Up)"
        case .statisticsElevationDown: "Arrow Down (Elevation Down)"
        case .statisticsDistance: "Signpost (Distance)"
        case .statisticsEnergy: "Flame (Energy / Calories)"
        case .statisticsStopwatch: "Stopwatch (Pace)"
        case .statisticsHeart: "Heart Rate"
        case .statisticsSpeedometer: "Speedometer (Speed)"
        }
    }

    var svgString: String {
        icon.svgString
    }

    var id: String {
        icon.id
    }

    var usageString: String {
        icon.usageString
    }
}

extension PageIcon: Hashable {
    
}
