// Copyright (c) 2023, the Dart project authors.  Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.

/// Values for the event name to be sent to Google Analytics
///
/// The [label] for each enum value is what will be logged, the [description]
/// is here for documentation purposes
enum DashEvent {
  // Events that can be sent by all tools; these
  // events should not be tool specific; toolOwner
  // not necessary for these events
  analyticsCollectionEnabled(
    label: 'analytics_collection_enabled',
    description: 'The opt-in status for analytics collection',
  ),

  // Events for flutter_tools
  hotReloadTime(
    label: 'hot_reload_time',
    description: 'Hot reload duration',
    toolOwner: DashTool.flutterTools,
  ),

  // Events for language_server
  lintUsageCounts(
    label: 'lint_usage_counts',
    description: 'Number of times each lint is enabled',
    toolOwner: DashTool.languageServer,
  ),
  clientNotification(
    label: 'client_notification',
    description: 'Notifications sent from the client',
    toolOwner: DashTool.languageServer,
  ),
  pluginRequest(
    label: 'plugin_request',
    description: 'Request responses from plugins',
    toolOwner: DashTool.languageServer,
  ),
  clientRequest(
    label: 'client_request',
    description: 'Requests sent from the client',
    toolOwner: DashTool.languageServer,
  ),
  serverSession(
    label: 'server_session',
    description: 'Dart Analyzer Server session data',
    toolOwner: DashTool.languageServer,
  ),
  severityAdjustments(
    label: 'severity_adjustments',
    description: 'Number of times diagnostic severity is changed',
    toolOwner: DashTool.languageServer,
  ),
  ;

  final String label;
  final String description;
  final DashTool? toolOwner;
  const DashEvent({
    required this.label,
    required this.description,
    this.toolOwner,
  });
}

/// Officially-supported clients of this package.
///
/// All [label] values should use an underscore as a delimiter.
enum DashTool {
  dartTools(
    label: 'dart_tools',
    description: 'A CLI for Dart development',
  ),
  flutterTools(
    label: 'flutter_tools',
    description: 'Runs flutter applications from CLI',
  ),
  languageServer(
    label: 'language_server',
    description: 'The Dart language server for IDE and CLI support.',
  );

  final String label;
  final String description;
  const DashTool({
    required this.label,
    required this.description,
  });
}

/// Enumerate options for platform
enum DevicePlatform {
  windows('Windows'),
  macos('macOS'),
  linux('Linux'),
  ;

  final String label;
  const DevicePlatform(this.label);
}
