import { BookOpenCheckIcon, SignpostIcon, type LucideIcon } from 'lucide-react';
import { cn } from '../../lib/classname';
import type { AICourseViewMode } from './AICourseContent';

type AIRoadmapViewSwitchProps = {
  viewMode: AICourseViewMode;
  setViewMode: (mode: AICourseViewMode) => void;
  isLoading: boolean;
  variant?: 'icon' | 'text';
};

export function AIRoadmapViewSwitch(props: AIRoadmapViewSwitchProps) {
  const { viewMode, setViewMode, isLoading, variant = 'icon' } = props;

  return (
    <div
      className={cn(
        'grid shrink-0 grid-cols-2 gap-0.5 rounded-md border border-gray-300 bg-white p-0.5 shadow-sm',
      )}
    >
      <SwitchButton
        onClick={() => setViewMode('outline')}
        isActive={viewMode === 'outline'}
        disabled={isLoading}
        variant={variant}
        icon={BookOpenCheckIcon}
        label="Outline"
      />

      <SwitchButton
        onClick={() => setViewMode('roadmap')}
        isActive={viewMode === 'roadmap'}
        disabled={isLoading}
        variant={variant}
        icon={SignpostIcon}
        label="Roadmap"
      />
    </div>
  );
}

type SwitchButtonProps = {
  onClick: () => void;
  isActive: boolean;
  disabled: boolean;
  variant?: 'icon' | 'text';
  icon: LucideIcon;
  label: string;
};

export function SwitchButton(props: SwitchButtonProps) {
  const {
    onClick,
    isActive,
    disabled,
    variant = 'icon',
    icon: Icon,
    label,
  } = props;

  return (
    <button
      className={cn(
        'flex items-center justify-center gap-1.5 rounded text-sm hover:bg-gray-100 disabled:cursor-not-allowed',
        isActive && 'bg-gray-100 text-gray-800',
        variant === 'text' ? 'px-2 py-1.5' : 'p-[5px]',
      )}
      onClick={onClick}
      disabled={disabled}
    >
      <Icon
        className={cn(
          'size-4',
          variant === 'icon' && 'h-3 w-3',
          isActive && 'text-gray-800',
        )}
      />
      {variant === 'text' && label}
    </button>
  );
}