export type AnalyticsDateRange = "7d" | "30d" | "90d" | "all";
export type AnalyticsStatusFilter =
  | "all"
  | "completed"
  | "in_progress"
  | "abandoned";

export interface AnalyticsFilters {
  dateRange: AnalyticsDateRange;
  status: AnalyticsStatusFilter;
}

export interface AnalyticsOverview {
  totalViews: number;
  responses: number;
  completionRate: number;
  avgTimeToComplete: string;
}

export interface TimeSeriesPoint {
  date: string;
  count: number;
}

export interface TrafficSourcePoint {
  name: string;
  value: number;
}

export interface ChoiceBreakdown {
  label: string;
  count: number;
  percent: number;
}

export interface NpsDistributionPoint {
  score: number;
  count: number;
}

export interface WordFrequency {
  word: string;
  count: number;
}

export interface QuestionAnalyticsBase {
  questionId: string;
  title: string;
  position: number;
  responseCount: number;
}

export interface ChoiceQuestionAnalytics extends QuestionAnalyticsBase {
  kind: "choice";
  questionType: "multiple_choice" | "checkbox" | "dropdown";
  allowMultiple: boolean;
  choices: ChoiceBreakdown[];
}

export interface NpsQuestionAnalytics extends QuestionAnalyticsBase {
  kind: "nps";
  distribution: NpsDistributionPoint[];
  npsScore: number;
}

export interface RatingQuestionAnalytics extends QuestionAnalyticsBase {
  kind: "rating";
  distribution: NpsDistributionPoint[];
  average: number;
}

export interface OpenTextQuestionAnalytics extends QuestionAnalyticsBase {
  kind: "open_text";
  words: WordFrequency[];
  samples: string[];
}

export interface GenericQuestionAnalytics extends QuestionAnalyticsBase {
  kind: "other";
}

export type QuestionAnalytics =
  | ChoiceQuestionAnalytics
  | NpsQuestionAnalytics
  | RatingQuestionAnalytics
  | OpenTextQuestionAnalytics
  | GenericQuestionAnalytics;

export interface RespondentSummary {
  id: string;
  status: string;
  startedAt: Date;
  completedAt: Date | null;
  timeToCompleteSeconds: number | null;
}

export interface SurveyAnalytics {
  surveyId: string;
  surveyTitle: string;
  overview: AnalyticsOverview;
  responsesOverTime: TimeSeriesPoint[];
  trafficSources: TrafficSourcePoint[];
  questions: QuestionAnalytics[];
  respondents: RespondentSummary[];
}

export interface RespondentDetailAnswer {
  questionId: string;
  questionTitle: string;
  questionType: string;
  position: number;
  displayValue: string;
}

export interface RespondentDetail {
  id: string;
  status: string;
  startedAt: Date;
  completedAt: Date | null;
  timeToCompleteSeconds: number | null;
  answers: RespondentDetailAnswer[];
}
