// LoopFollow
// OnboardingStep.swift

import Foundation

/// The phases of the first-run onboarding wizard.
///
/// Progress is tracked by phase, not by page: the set of phases is stable, while
/// some phases contain a variable number of internal pages (the Nightscout connect
/// phase can be one or two pages; the alarms phase is one page per offered alarm,
/// which differs between Nightscout and Dexcom). Those phases report their
/// within-phase position through `OnboardingViewModel.phaseProgress`, so the
/// overall progress bar stays smooth no matter how many pages a phase has.
///
/// `connect` renders the Nightscout, Dexcom, or import view depending on the data
/// source the user picks in `dataSource`.
enum OnboardingStep: CaseIterable, Hashable {
    case welcome
    case overview
    case dataSource
    case connect
    case units
    case generalAlarms
    case alarms
    case tabOrder
    case notifications
    case telemetry
    case completion

    /// Steps that show the progress bar + phase label + Skip at the top. The
    /// welcome and completion screens are full-bleed and provide their own CTA.
    var showsProgressHeader: Bool {
        switch self {
        case .welcome, .completion:
            return false
        default:
            return true
        }
    }

    /// Steps that use the shared Back / Continue footer. Phases that contain their
    /// own internal pages or custom primary buttons (overview, connect, units,
    /// alarms, notifications, telemetry) supply their own footer instead, as do the
    /// full-bleed welcome and completion screens.
    var usesSharedFooter: Bool {
        switch self {
        case .dataSource, .generalAlarms, .tabOrder:
            return true
        default:
            return false
        }
    }

    /// Short name shown in the progress header for this phase.
    var phaseTitle: String {
        switch self {
        case .welcome, .completion: return ""
        case .overview: return "Overview"
        case .dataSource: return "Data source"
        case .connect: return "Connect"
        case .units: return "Units & metrics"
        case .generalAlarms: return "Alarm basics"
        case .alarms: return "Alarms"
        case .tabOrder: return "Tabs"
        case .notifications: return "Notifications"
        case .telemetry: return "Privacy"
        }
    }
}
