import { Check, ChevronDown, Copy, X as XIcon } from 'lucide-react'
import {
  Button,
  DropdownMenu,
  DropdownMenuContent,
  DropdownMenuItem,
  DropdownMenuTrigger,
} from 'ui'

import type { LogData, QueryType } from './Logs.types'
import { buildLogsPrompt } from './Logs.utils'
import { SIDEBAR_KEYS } from '@/components/layouts/ProjectLayout/LayoutSidebar/LayoutSidebarProvider'
import { AiAssistantDropdown } from '@/components/ui/AiAssistantDropdown'
import { ShortcutBadge } from '@/components/ui/ShortcutBadge'
import { useAiAssistantStateSnapshot } from '@/state/ai-assistant-state'
import { SHORTCUT_IDS } from '@/state/shortcuts/registry'
import { useSidebarManagerSnapshot } from '@/state/sidebar-manager-state'

export type LogCopyFormat = 'json' | 'markdown' | 'csv'

interface MultiSelectActionBarProps {
  selectedRows: Set<string>
  selectedRowsData: LogData[]
  copiedFormat: LogCopyFormat | null
  onCopy: (format: LogCopyFormat) => void
  onClear: () => void
  queryType?: QueryType
  sqlQuery?: string
}

export function MultiSelectActionBar({
  selectedRows,
  selectedRowsData,
  copiedFormat,
  onCopy,
  onClear,
  queryType,
  sqlQuery,
}: MultiSelectActionBarProps) {
  const { openSidebar } = useSidebarManagerSnapshot()
  const aiSnap = useAiAssistantStateSnapshot()

  function handleOpenAiAssistant() {
    const prompt = buildLogsPrompt(selectedRowsData, queryType, sqlQuery)
    openSidebar(SIDEBAR_KEYS.AI_ASSISTANT)
    aiSnap.newChat({ initialMessage: prompt })
  }
  const count = selectedRows.size
  if (count === 0) return null

  return (
    <div
      className="flex items-center gap-2 px-3 py-1.5 border-b bg-surface-200 text-sm sticky top-0 z-10"
      style={{ height: 40 }}
    >
      <span className="text-foreground-light font-mono text-xs">
        {count} row{count !== 1 ? 's' : ''} selected
      </span>

      <div className="flex items-center gap-1 ml-auto">
        <DropdownMenu>
          <DropdownMenuTrigger asChild>
            <Button
              type="default"
              size="tiny"
              icon={copiedFormat ? <Check size={12} className="text-brand" /> : <Copy size={12} />}
              iconRight={<ChevronDown size={11} />}
            >
              {copiedFormat ? 'Copied!' : 'Copy'}
            </Button>
          </DropdownMenuTrigger>
          <DropdownMenuContent align="end" className="w-60">
            <DropdownMenuItem onClick={() => onCopy('json')} className="gap-x-2">
              <Copy size={13} />
              <p>Copy as JSON</p>
              <ShortcutBadge shortcutId={SHORTCUT_IDS.RESULTS_COPY_JSON} className="ml-auto" />
            </DropdownMenuItem>
            <DropdownMenuItem onClick={() => onCopy('markdown')} className="gap-x-2">
              <Copy size={13} />
              <p>Copy as Markdown</p>
              <ShortcutBadge shortcutId={SHORTCUT_IDS.RESULTS_COPY_MARKDOWN} className="ml-auto" />
            </DropdownMenuItem>
            <DropdownMenuItem onClick={() => onCopy('csv')} className="gap-x-2">
              <Copy size={13} />
              <p>Copy as CSV</p>
              <ShortcutBadge shortcutId={SHORTCUT_IDS.RESULTS_COPY_CSV} className="ml-auto" />
            </DropdownMenuItem>
          </DropdownMenuContent>
        </DropdownMenu>

        <AiAssistantDropdown
          label="Explain with AI"
          buildPrompt={() => buildLogsPrompt(selectedRowsData, queryType, sqlQuery)}
          onOpenAssistant={handleOpenAiAssistant}
          telemetrySource="log_explorer"
        />

        <Button
          type="text"
          size="tiny"
          icon={<XIcon size={12} />}
          onClick={onClear}
          title="Clear selection"
          className="text-foreground-lighter px-1.5 hover:text-foreground"
        />
      </div>
    </div>
  )
}
