import api from './client';

// ---------------------------------------------------------------------------
// Types
// ---------------------------------------------------------------------------

export interface MarketOverviewItem {
  market: string;
  total_deals: number;
  won_deals: number;
  close_rate: number;
  total_revenue: number;
  avg_deal_size: number;
  active_contacts: number;
}

export interface MarketOverviewResponse {
  markets: MarketOverviewItem[];
  total_markets: number;
}

export interface MarketComparisonRow {
  market: string;
  revenue: number;
  close_rate: number;
  avg_deal_size: number;
  deals_per_owner: number;
  cpc: number;
  total_deals: number;
  won_deals: number;
  unique_owners: number;
  market_share: number;
}

export interface MarketComparisonResponse {
  markets: MarketComparisonRow[];
  averages: {
    revenue: number;
    close_rate: number;
    avg_deal_size: number;
  };
  top_performers: MarketComparisonRow[];
  bottom_performers: MarketComparisonRow[];
  total_markets: number;
}

export interface PipelineStage {
  stage: string;
  count: number;
  value: number;
}

export interface MarketDrillDownSummary {
  total_deals: number;
  won_deals: number;
  lost_deals: number;
  active_deals: number;
  close_rate: number;
  total_revenue: number;
  avg_deal_size: number;
  total_contacts: number;
  active_contacts: number;
}

export interface MarketTopDeal {
  id: number;
  amount: number;
  stage: string;
  probability: number | null;
  expected_close_date: string | null;
  pipeline: string | null;
  contact_id: number | null;
}

export interface MarketRecentActivity {
  id: number;
  stage: string;
  amount: number;
  created_at: string | null;
}

export interface RevenueTrendPoint {
  month: string;
  revenue: number;
}

export interface MarketDrillDownResponse {
  market: string;
  summary: MarketDrillDownSummary;
  pipeline_by_stage: PipelineStage[];
  top_deals: MarketTopDeal[];
  recent_activity: MarketRecentActivity[];
  revenue_trend: RevenueTrendPoint[];
}

export interface UnderperformingMetrics {
  market: string;
  close_rate: number;
  total_revenue: number;
  avg_deal_size: number;
  total_deals: number;
  won_deals: number;
  recent_revenue: number;
  older_revenue: number;
  declining: boolean;
}

export interface UnderperformingMarket {
  market: string;
  issues: string[];
  recommendations: string[];
  metrics: UnderperformingMetrics;
  severity: 'high' | 'medium' | 'low';
}

export interface UnderperformingResponse {
  underperforming: UnderperformingMarket[];
  total_analyzed: number;
  benchmarks: {
    avg_close_rate: number;
    avg_revenue: number;
  };
}

// ---------------------------------------------------------------------------
// API client
// ---------------------------------------------------------------------------

export const multiMarketApi = {
  getOverview: async (): Promise<MarketOverviewResponse> => {
    const { data } = await api.get('/api/analytics/multi-market/overview');
    return data;
  },

  getComparison: async (): Promise<MarketComparisonResponse> => {
    const { data } = await api.get('/api/analytics/multi-market/comparison');
    return data;
  },

  getDrillDown: async (market: string): Promise<MarketDrillDownResponse> => {
    const { data } = await api.get(`/api/analytics/multi-market/market/${encodeURIComponent(market)}`);
    return data;
  },

  getUnderperforming: async (): Promise<UnderperformingResponse> => {
    const { data } = await api.get('/api/analytics/multi-market/underperforming');
    return data;
  },
};
