import {
  BarChart3,
  Bell,
  Calendar,
  Clock,
  Copy,
  FileBarChart,
  FileText,
  Globe,
  Layers,
  Lightbulb,
  Link2,
  ListChecks,
  Map,
  Network,
  Smartphone,
  TrendingUp,
  Wand2,
} from 'lucide-react';
import type { LucideIcon } from 'lucide-react';

import type { SiteSummary } from '@/types';

export interface SiteNavItem {
  key: string;
  label: string;
  icon: LucideIcon;
  routeName: string;
  disabled: boolean;
  disabledTooltip?: string;
}

export interface SiteNavGroup {
  label: string;
  items: SiteNavItem[];
}

const GSC_TOOLTIP = 'Connect Google Search Console to enable this feature';
const ANALYSIS_TOOLTIP = 'Run an analysis to enable this feature';

export function getSiteNavItems(site: SiteSummary): SiteNavGroup[] {
  return [
    {
      label: 'Setup',
      items: [{ key: 'connections', label: 'Connections', icon: Link2, routeName: 'onboarding.index', disabled: false }],
    },
    {
      label: 'Analysis',
      items: [
        {
          key: 'analyze',
          label: 'Analyze',
          icon: BarChart3,
          routeName: 'analyze.index',
          disabled: !(site.has_gsc && site.gsc_synced),
          disabledTooltip: GSC_TOOLTIP,
        },
        {
          key: 'recommendations',
          label: 'Recommendations',
          icon: Lightbulb,
          routeName: 'recommendations.index',
          disabled: !site.has_analysis,
          disabledTooltip: ANALYSIS_TOOLTIP,
        },
        {
          key: 'opportunity-map',
          label: 'Opportunity Map',
          icon: Map,
          routeName: 'opportunity-map.index',
          disabled: !site.has_gsc,
          disabledTooltip: GSC_TOOLTIP,
        },
        {
          key: 'batch-ai',
          label: 'Batch AI',
          icon: Wand2,
          routeName: 'batch-ai.index',
          disabled: !site.has_analysis,
          disabledTooltip: ANALYSIS_TOOLTIP,
        },
      ],
    },
    {
      label: 'Intelligence',
      items: [
        {
          key: 'cannibalization',
          label: 'Cannibalization',
          icon: Copy,
          routeName: 'cannibalization.index',
          disabled: !site.has_gsc,
          disabledTooltip: GSC_TOOLTIP,
        },
        { key: 'content-briefs', label: 'Content Briefs', icon: FileText, routeName: 'content-briefs.index', disabled: false },
        { key: 'content-inventory', label: 'Content Inventory', icon: ListChecks, routeName: 'content-inventory.index', disabled: false },
        {
          key: 'freshness',
          label: 'Freshness',
          icon: Clock,
          routeName: 'freshness.index',
          disabled: !site.has_gsc,
          disabledTooltip: GSC_TOOLTIP,
        },
        {
          key: 'topic-clusters',
          label: 'Topic Clusters',
          icon: Network,
          routeName: 'topic-clusters.index',
          disabled: !site.has_gsc,
          disabledTooltip: GSC_TOOLTIP,
        },
        {
          key: 'link-opportunities',
          label: 'Link Opportunities',
          icon: Link2,
          routeName: 'sites.link-opportunities.index',
          disabled: !site.has_gsc,
          disabledTooltip: GSC_TOOLTIP,
        },
        {
          key: 'geographic',
          label: 'Geographic',
          icon: Globe,
          routeName: 'geographic.index',
          disabled: !site.has_gsc,
          disabledTooltip: GSC_TOOLTIP,
        },
        {
          key: 'device',
          label: 'Device',
          icon: Smartphone,
          routeName: 'device.index',
          disabled: !site.has_gsc,
          disabledTooltip: GSC_TOOLTIP,
        },
      ],
    },
    {
      label: 'Tracking',
      items: [
        { key: 'roi', label: 'ROI', icon: TrendingUp, routeName: 'sites.roi.index', disabled: false },
        { key: 'pipeline', label: 'Pipeline', icon: Layers, routeName: 'pipeline.index', disabled: false },
        {
          key: 'reports',
          label: 'Reports',
          icon: FileBarChart,
          routeName: 'sites.reports.index',
          disabled: !site.has_analysis,
          disabledTooltip: ANALYSIS_TOOLTIP,
        },
        { key: 'calendar', label: 'Calendar', icon: Calendar, routeName: 'calendar.index', disabled: false },
        {
          key: 'alerts',
          label: 'Traffic Alerts',
          icon: Bell,
          routeName: 'alerts.index',
          disabled: !site.has_analysis,
          disabledTooltip: ANALYSIS_TOOLTIP,
        },
        {
          key: 'schedule',
          label: 'Schedule',
          icon: Clock,
          routeName: 'sites.schedule.edit',
          disabled: !site.has_analysis,
          disabledTooltip: ANALYSIS_TOOLTIP,
        },
      ],
    },
  ];
}
