import { useEffect, useState } from 'react' import { useTranslation } from 'react-i18next' import { MdOutlineWbSunny, MdOutlineNightlightRound } from 'react-icons/md' import { FaRegSnowflake } from 'react-icons/fa' import { api, endpoints } from '../api' // classColors lives under 06_annotations until F3 moves it to its own home. // Importing through the 06_annotations barrel would create a cycle // (DetectionClasses -> 06_annotations barrel -> AnnotationsPage -> DetectionClasses). // STC-ARCH-01 exempts this single path as an F3-pending edge. import { getClassColor, FALLBACK_CLASS_NAMES } from '../class-colors' import type { DetectionClass } from '../types' interface Props { selectedClassNum: number onSelect: (classNum: number) => void photoMode: number onPhotoModeChange: (mode: number) => void } const FALLBACK_CLASSES: DetectionClass[] = [0, 20, 40].flatMap(modeOffset => FALLBACK_CLASS_NAMES.map((name, i) => ({ id: i + modeOffset, name, shortName: name.slice(0, 3), color: getClassColor(i), maxSizeM: 10, photoMode: modeOffset, })), ) export default function DetectionClasses({ selectedClassNum, onSelect, photoMode, onPhotoModeChange }: Props) { const { t } = useTranslation() const [classes, setClasses] = useState([]) useEffect(() => { api.get(endpoints.annotations.classes()) .then(list => setClasses(list?.length ? list : FALLBACK_CLASSES)) .catch(() => setClasses(FALLBACK_CLASSES)) }, []) useEffect(() => { const handler = (e: KeyboardEvent) => { const num = parseInt(e.key) if (num >= 1 && num <= 9) { const idx = num - 1 const cls = classes[idx + photoMode] if (cls) onSelect(cls.id) } } window.addEventListener('keydown', handler) return () => window.removeEventListener('keydown', handler) }, [classes, photoMode, onSelect]) // Auto-select first class of current photoMode when mode changes or classes load useEffect(() => { const modeClasses = classes.filter(c => c.photoMode === photoMode) const currentIsInMode = modeClasses.some(c => c.id === selectedClassNum) if (!currentIsInMode && modeClasses.length > 0) { onSelect(modeClasses[0].id) } }, [classes, photoMode, selectedClassNum, onSelect]) const modes = [ { value: 0, label: t('annotations.regular'), icon: , activeClass: 'bg-az-orange text-white', iconColor: 'text-az-orange' }, { value: 20, label: t('annotations.winter'), icon: , activeClass: 'bg-az-blue text-white', iconColor: 'text-az-blue' }, { value: 40, label: t('annotations.night'), icon: , activeClass: 'bg-purple-600 text-white', iconColor: 'text-purple-400' }, ] return (
{t('annotations.classes')}
{classes.filter(c => c.photoMode === photoMode).map((c, i) => ( ))}
{t('annotations.photoMode')}
{modes.map(m => ( ))}
) }