'use client'

import { useState } from 'react'
import { Bot, Check, ChevronDown, Plus, Loader2 } from 'lucide-react'
import { useChatStore } from '@/lib/store'
import { AgentStatus } from '@/lib/types'
import { Button } from '@/components/ui/button'
import { Popover, PopoverContent, PopoverTrigger } from '@/components/ui/popover'
import {
  Command,
  CommandGroup,
  CommandItem,
  CommandList,
  CommandSeparator,
} from '@/components/ui/command'
import { cn } from '@/lib/utils'

export function AgentSelector() {
  const [open, setOpen] = useState(false)
  const {
    agents,
    currentAgentId,
    setCurrentAgent,
    isRightPanelOpen,
    toggleRightPanel,
    addRightPanelTab,
    setActiveRightPanelTab,
    triggerAgentCreate,
    isAgentsLoading,
  } = useChatStore()

  const currentAgent = agents.find(a => a.id === currentAgentId)
  const availableAgents = agents.filter(a => a.status !== 'deleted')

  const getStatusText = (status: string) => {
    switch (status) {
      case AgentStatus.RUNNING:
        return '运行中'
      case AgentStatus.PAUSED:
        return '已暂停'
      case AgentStatus.ERROR:
        return '创建/更新失败'
      default:
        return status
    }
  }

  const isAgentDisabled = (status: string) => {
    const s = status.toLowerCase()
    return s === AgentStatus.PAUSED || s === AgentStatus.ERROR
  }

  const handleSelectAgent = (agentId: string) => {
    const agent = agents.find(a => a.id === agentId)
    if (agent && isAgentDisabled(agent.status)) return
    setCurrentAgent(agentId)
    setOpen(false)
  }

  const handleCreateAgent = () => {
    localStorage.setItem('agentIsCreating', 'true')
    triggerAgentCreate()

    addRightPanelTab({ id: 'agent', name: '智能体', icon: Bot, color: 'text-cyan-500' })
    setActiveRightPanelTab('agent')

    if (!isRightPanelOpen) {
      toggleRightPanel()
    }

    setOpen(false)
  }

  return (
    <Popover open={open} onOpenChange={setOpen}>
      <PopoverTrigger asChild>
        <button
          className={cn(
            'flex w-full items-center gap-1 px-4 py-2.5 text-sm',
            'border-b border-border',
            'hover:bg-accent/50 transition-colors',
            'rounded-t-2xl'
          )}
        >
          <Bot className="h-4 w-4 text-muted-foreground shrink-0" />
          <span
            className={cn('flex-1 text-left truncate', !currentAgent && 'text-muted-foreground')}
          >
            {currentAgent ? '@' + currentAgent.name : '选择智能体'}
          </span>
          <ChevronDown className="h-3.5 w-3.5 text-muted-foreground shrink-0" />
        </button>
      </PopoverTrigger>
      <PopoverContent className="w-[280px] p-0" align="start" side="top" sideOffset={8}>
        <Command value={currentAgentId || undefined}>
          <CommandList>
            <CommandGroup heading="智能体">
              {isAgentsLoading ? (
                <div className="px-2 py-4 flex items-center justify-center gap-2">
                  <Loader2 className="h-4 w-4 text-muted-foreground animate-spin" />
                  <span className="text-sm text-muted-foreground">加载中...</span>
                </div>
              ) : availableAgents.length === 0 ? (
                <div className="px-2 py-4 text-center text-sm text-muted-foreground">
                  暂无智能体
                </div>
              ) : (
                availableAgents.map(agent => {
                  const disabled = isAgentDisabled(agent.status)
                  return (
                    <CommandItem
                      key={agent.id}
                      value={agent.id}
                      disabled={disabled}
                      onSelect={() => {
                        if (disabled) return
                        handleSelectAgent(agent.id)
                      }}
                      className="flex items-center gap-1.5"
                    >
                      {/* 左侧编组:图标 + 名称 */}
                      <Bot
                        className={cn(
                          'h-4 w-4 shrink-0',
                          disabled ? 'text-muted-foreground/50' : 'text-muted-foreground'
                        )}
                      />
                      <span className="flex-1 truncate min-w-0">{agent.name}</span>
                      {/* 右侧编组:状态胶囊 + 勾选占位(固定宽度,保证右边缘对齐) */}
                      <div className="flex items-center gap-1 shrink-0">
                        <span
                          className={cn(
                            'shrink-0 px-1.5 py-0.5 rounded-full text-[10px] font-medium leading-none',
                            agent.status.toLowerCase() === AgentStatus.RUNNING &&
                              'bg-green-500/5 text-green-600 dark:bg-green-500/10 dark:text-green-400',
                            agent.status.toLowerCase() === AgentStatus.PAUSED &&
                              'bg-amber-500/5 text-amber-600 dark:bg-amber-500/10 dark:text-amber-400',
                            agent.status.toLowerCase() === AgentStatus.ERROR &&
                              'bg-red-500/5 text-red-600 dark:bg-red-500/10 dark:text-red-400'
                          )}
                        >
                          {getStatusText(agent.status)}
                        </span>
                        <Check
                          className={cn(
                            'h-4 w-4 shrink-0',
                            agent.id === currentAgentId ? 'text-primary' : 'invisible'
                          )}
                        />
                      </div>
                    </CommandItem>
                  )
                })
              )}
            </CommandGroup>
            <CommandSeparator />
            <CommandGroup>
              <CommandItem
                onSelect={handleCreateAgent}
                className="flex items-center justify-center gap-1 text-primary"
              >
                <Plus className="h-4 w-4 text-primary shrink-0" />
                <span>创建 Agent</span>
              </CommandItem>
            </CommandGroup>
          </CommandList>
        </Command>
      </PopoverContent>
    </Popover>
  )
}