import type {PlatformKey} from 'sentry/types/project';
import type {BaseEventAnalyticsParams} from 'sentry/utils/analytics/workflowAnalyticsEvents';

type SetupType = 'automatic' | 'manual';
type StackTraceView = 'stacktrace_issue_details' | 'integration_configuration_detail';

export type EcosystemEventParameters = {
  'integrations.non_inapp_stacktrace_link_clicked': {
    group_id: number;
    provider: string;
    view: StackTraceView;
  } & BaseEventAnalyticsParams;
  'integrations.stacktrace_codecov_link_clicked': {
    group_id: number;
    view: StackTraceView;
  } & BaseEventAnalyticsParams;
  'integrations.stacktrace_complete_setup': {
    provider: string;
    setup_type: SetupType;
    view: StackTraceView;
    is_suggestion?: boolean;
  };
  'integrations.stacktrace_docs_clicked': {
    provider: string;
    view: StackTraceView;
  };
  'integrations.stacktrace_link_clicked': {
    group_id: number;
    provider: string;
    view: StackTraceView;
  } & BaseEventAnalyticsParams;
  'integrations.stacktrace_link_cta_dismissed': {
    view: StackTraceView;
  } & BaseEventAnalyticsParams;
  'integrations.stacktrace_manual_option_clicked': {
    provider: string;
    setup_type: SetupType;
    view: StackTraceView;
  };
  'integrations.stacktrace_start_setup': {
    provider: string;
    setup_type: SetupType;
    view: StackTraceView;
    platform?: PlatformKey;
    // BaseEventAnalyticsParams partial because it is not always present
  } & Partial<BaseEventAnalyticsParams>;
  'integrations.stacktrace_submit_config': {
    provider: string;
    setup_type: SetupType;
    view: StackTraceView;
  };
};

type EcosystemEventKeys = keyof EcosystemEventParameters;

export const ecosystemEventMap: Record<EcosystemEventKeys, string | null> = {
  'integrations.stacktrace_complete_setup': 'Integrations: Stacktrace Complete Setup',
  'integrations.stacktrace_docs_clicked': 'Integrations: Stacktrace Docs Clicked',
  'integrations.stacktrace_link_clicked': 'Integrations: Stacktrace Link Clicked',
  'integrations.stacktrace_link_cta_dismissed':
    'Integrations: Stacktrace Link CTA Dismissed',
  'integrations.stacktrace_manual_option_clicked':
    'Integrations: Stacktrace Manual Option Clicked',
  'integrations.stacktrace_start_setup': 'Integrations: Stacktrace Start Setup',
  'integrations.stacktrace_submit_config': 'Integrations: Stacktrace Submit Config',
  'integrations.stacktrace_codecov_link_clicked':
    'Integrations: Stacktrace Codecov Link Clicked',
  'integrations.non_inapp_stacktrace_link_clicked':
    'Integrations: Non-InApp Stacktrace Link Clicked',
};