import { useParams } from 'common'
import { EyeOff, Globe } from 'lucide-react'
import Link from 'next/link'
import { Button, Tooltip, TooltipContent, TooltipTrigger } from 'ui'
import type { AdvisorSignalItem } from './AdvisorPanel.types'
import { useAdvisorSignals } from './useAdvisorSignals'
import { SIDEBAR_KEYS } from '@/components/layouts/ProjectLayout/LayoutSidebar/LayoutSidebarProvider'
import { AiAssistantDropdown } from '@/components/ui/AiAssistantDropdown'
import { InlineLink } from '@/components/ui/InlineLink'
import { useAdvisorStateSnapshot } from '@/state/advisor-state'
import { useAiAssistantStateSnapshot } from '@/state/ai-assistant-state'
import { useSidebarManagerSnapshot } from '@/state/sidebar-manager-state'
interface AdvisorSignalDetailProps {
item: AdvisorSignalItem
}
const buildSignalAssistantPrompt = (item: AdvisorSignalItem) => {
return [
`I'm reviewing an Advisor signal for a banned IP address: ${item.sourceData.ip}.`,
item.description ?? item.summary,
'Help me assess whether this ban should remain in place, what I should investigate before removing it, and what the safest next step is.',
'Please include when it is reasonable to dismiss this signal versus remove the ban.',
].join('\n\n')
}
export const AdvisorSignalDetail = ({ item }: AdvisorSignalDetailProps) => {
const { ref: projectRef } = useParams()
const snap = useAiAssistantStateSnapshot()
const { openSidebar } = useSidebarManagerSnapshot()
const { setSelectedItem } = useAdvisorStateSnapshot()
const { dismissSignal } = useAdvisorSignals({ projectRef })
const issueDescription = (
<>
The IP address {item.sourceData.ip} is temporarily
blocked because of suspicious traffic or repeated failed password attempts. If this block is
expected, you can dismiss this signal or remove the ban.
>
)
const handleAskAssistant = () => {
openSidebar(SIDEBAR_KEYS.AI_ASSISTANT)
snap.newChat({
name: `Review ${item.title.toLowerCase()}`,
initialInput: buildSignalAssistantPrompt(item),
})
}
const onDismissSignal = () => {
dismissSignal(item.dismissalKey)
setSelectedItem(undefined)
}
return (
{issueDescription}{' '}
{item.docsUrl !== undefined && (
<>