import APIClient
import Foundation

public struct OnboardingCompletedResult: Equatable {
    public let me: Me
    public let isFirstTimeUser: Bool
    public let onboardingFlowVariant: OnboardingFlowVariant

    public init(me: Me, isFirstTimeUser: Bool, onboardingFlowVariant: OnboardingFlowVariant) {
        self.me = me
        self.isFirstTimeUser = isFirstTimeUser
        self.onboardingFlowVariant = onboardingFlowVariant
    }
}

public enum OnboardingStepType: String, CaseIterable, Equatable {
    case welcome
    case signUp = "sign_up"
    case phoneAuth = "phone_auth"
    case codeVerification = "code_verification"
    case displayNameSelection = "display_name_selection"
    case usernameSelection = "username_selection"
    case birthdayEntry = "birthday_entry"
    case notificationPermissions = "notification_permissions"
    case contactPermissions = "contact_permissions"
    case contactSync = "contact_sync"
    case madlibsFlow = "madlibs_flow"
}

public enum OnboardingFlowVariant: String, CaseIterable, Equatable {
    case `default`
    case madlibs
}

public extension OnboardingStepType {
    var analyticsName: String {
        switch self {
        case .welcome: return "welcome"
        case .signUp: return "signup"
        case .phoneAuth: return "phone_auth"
        case .codeVerification: return "code_verification"
        case .displayNameSelection: return "display_name"
        case .usernameSelection: return "username"
        case .birthdayEntry: return "birthday"
        case .notificationPermissions: return "notification_permissions"
        case .contactPermissions: return "contact_permissions"
        case .contactSync: return "contact_sync"
        case .madlibsFlow: return "madlibs_flow"
        }
    }
}
