/**
 * FounderDashboardTypes — interface definitions for FounderDashboard.tsx (DEBT-005 extraction).
 *
 * Extracted verbatim from FounderDashboard.tsx (move not rewrite).
 */

/** F4ADMINUX-002: prior-period delta chip for a stat card */
export interface StatDelta {
  value: number;
  direction: 'up' | 'down' | 'flat';
  goodWhen: 'up' | 'down';
}
import type { CohortWeekData } from '@/Components/admin/CohortRetentionMatrix';
import type { ConversionFunnel } from '@/Components/admin/ConversionFunnelCard';
import type { NorthStarData } from '@/Components/admin/NorthStarWidget';

export interface FounderStats {
  signups_today: number;
  dau: number;
  wau: number;
  mau: number;
  total_sites: number;
  analyses_today: number;
  analyses_week: number;
  analyses_month: number;
  drafts_today: number;
  drafts_week: number;
  drafts_month: number;
  published_today: number;
  published_week: number;
  published_month: number;
  active_subscriptions: number;
  mrr_estimate: number;
  billing_enabled: boolean;
  queue_pending: number;
  queue_failed_24h: number;
  /** R6ADMIN-003: 'database' | 'redis' | 'sync' | … — N/A tile when not database driver. */
  queue_driver: string;
  activation_rate: number;
  /** F4ADMINUX-002: prior-period deltas keyed by stat name */
  deltas?: Record<string, StatDelta>;
}

export interface FunnelStage {
  name: string;
  users: number;
  rate: number;
}

export interface FunnelData {
  stages: FunnelStage[];
  activation_rate: number;
}

export interface TopUser {
  user_id: number;
  name: string;
  email: string;
  action_count: number;
}

export interface CancellationReason {
  reason: string;
  count: number;
}

export interface TtvStats {
  median_hours: number | null;
  p75_hours: number | null;
  p95_hours: number | null;
  sample_size: number;
  goal_hours: number;
}

export interface EngagementDay {
  date: string;
  dau: number;
  wau: number;
  mau: number;
}

export interface ChurnMonth {
  month: string;
  churn_rate_pct: number;
  churned_users: number;
}

export interface NpsStats {
  score: number | null;
  total: number;
  promoters: number;
  passives: number;
  detractors: number;
  by_type: Record<string, number>;
}

export interface SerpAdoption {
  users_with_key: number;
  keywords_analyzed_7d: number;
}

export interface AcquisitionSource {
  source: string;
  signups: number;
  activated: number;
  drafted: number;
  activation_rate: number;
}

export interface MrrMovement {
  churn_mrr: number;
  voluntary_churn_mrr: number;
  involuntary_churn_mrr: number;
  new_mrr: number;
  net_new_mrr: number;
  [key: string]: number;
}

export interface LtvMetrics {
  arpu: number;
  ltv: number | null;
  expansion_mrr: number;
  monthly_churn_rate: number | null;
}

export interface ActivationFunnelStep {
  label: string;
  count: number;
  rate: number;
}

export interface ActivationFunnelData {
  steps: ActivationFunnelStep[];
}

export interface OnboardingFunnelStage {
  name: string;
  users: number;
  rate: number;
}

export interface OnboardingFunnelData {
  stages: OnboardingFunnelStage[];
  completion_rate: number;
}

export interface RecommendationLifecycleData {
  stage_counts: Record<string, number>;
  total: number;
  applied_rate: number;
}

export interface DataQuality {
  score: number | null;
  total_events_7d: number;
  validation_failures_7d: number;
  computed_at: string | null;
}

export interface TriageTrialEnding {
  user_id: number;
  name: string;
  email: string;
  trial_ends_at: string | null;
  days_left: number;
}

export interface TriageFailedPayment {
  user_id: number;
  name: string;
  email: string;
  past_due_since_at: string | null;
}

export interface TriageBrokenConnection {
  site_id: number;
  site_name: string;
  user_id: number;
  gsc_status: string;
  last_synced_at: string | null;
  sync_error: string | null;
}

export interface TriageFailedPipeline {
  site_id: number;
  site_name: string;
  user_id: number;
  failed_at: string | null;
  error: string | null;
}

export interface TriageStalledActivation {
  user_id: number;
  name: string;
  email: string;
  signed_up_at: string;
  days_since_signup: number;
}

export interface TriageWorklist {
  trials_ending: TriageTrialEnding[];
  failed_payments: TriageFailedPayment[];
  broken_connections: TriageBrokenConnection[];
  failed_pipelines: TriageFailedPipeline[];
  stalled_activation: TriageStalledActivation[];
}

export interface FounderDashboardProps {
  stats: FounderStats;
  top_users: TopUser[];
  funnel: FunnelData;
  cancellation_reasons: CancellationReason[];
  north_star: NorthStarData;
  cohort_matrix: CohortWeekData[];
  time_to_value: TtvStats;
  engagement_trend: EngagementDay[];
  conversion_funnel: ConversionFunnel;
  monthly_churn: ChurnMonth[];
  mrr_movement?: MrrMovement;
  ltv_metrics?: LtvMetrics;
  nps: NpsStats;
  serp_adoption: SerpAdoption;
  acquisition_by_source: AcquisitionSource[];
  activation_funnel: ActivationFunnelData;
  onboarding_funnel: OnboardingFunnelData;
  recommendation_lifecycle: RecommendationLifecycleData;
  data_quality: DataQuality;
  triage_worklist: TriageWorklist;
  metric_errors: string[];
  funnel_period: 7 | 30 | 90;
  posthog_configured: boolean;
  last_refreshed_at: string;
  cache_ttl_seconds: number;
}
