import { apiQueryConfigAlarm } from '@/services/master/MessageController'; import { useIntl, useModel } from '@umijs/max'; import { Button, Card, Col, Row, Select, theme, Tooltip, Typography, } from 'antd'; import { useEffect, useMemo, useState } from 'react'; const { Text } = Typography; interface CameraV6Props { thing: MasterModel.Thing | null; cameraConfig?: MasterModel.CameraV6 | null; onSubmit?: (config: MasterModel.CameraV6) => void; isOnline?: boolean; } const CameraV6: React.FC = ({ thing, cameraConfig, onSubmit, isOnline = false, }) => { const { token } = theme.useToken(); const intl = useIntl(); const { initialState } = useModel('@@initialState'); const [selectedAlerts, setSelectedAlerts] = useState([]); const [recordingMode, setRecordingMode] = useState('none'); const [alarmConfig, setAlarmConfig] = useState( null, ); // Recording modes for V6 - using useMemo for i18n const RECORDING_MODES = useMemo( () => [ { label: intl.formatMessage({ id: 'master.devices.camera.config.recordingMode.none', defaultMessage: 'Không ghi', }), value: 'none', }, { label: intl.formatMessage({ id: 'master.devices.camera.config.recordingMode.alarm', defaultMessage: 'Theo cảnh báo', }), value: 'alarm', }, { label: intl.formatMessage({ id: 'master.devices.camera.config.recordingMode.all', defaultMessage: '24/24', }), value: 'all', }, ], [intl], ); // Initialize states from cameraConfig when it's available useEffect(() => { if (cameraConfig) { // Set recording mode from config if (cameraConfig.record_type) { setRecordingMode(cameraConfig.record_type); } // Set selected alerts from config if ( cameraConfig.record_alarm_list && Array.isArray(cameraConfig.record_alarm_list) ) { setSelectedAlerts(cameraConfig.record_alarm_list); } } }, [cameraConfig]); // Fetch alarm config when thing data is available and recording mode is 'alarm' useEffect(() => { const fetchAlarmConfig = async () => { if ( !thing || !initialState?.currentUserProfile?.metadata?.frontend_thing_key || recordingMode !== 'alarm' ) { return; } try { const resp = await apiQueryConfigAlarm( thing.metadata?.data_channel_id || '', initialState.currentUserProfile.metadata.frontend_thing_key, { offset: 0, limit: 1, subtopic: `config.${thing.metadata?.type}.alarms`, }, ); if (resp.messages && resp.messages.length > 0) { const parsed = resp.messages[0].string_value_parsed; if (Array.isArray(parsed)) { setAlarmConfig(parsed as MasterModel.Alarm[]); } else { setAlarmConfig([]); } } } catch (error) { console.error('Failed to fetch alarm config:', error); } }; fetchAlarmConfig(); }, [thing, initialState, recordingMode]); const handleAlertToggle = (alertId: string) => { if (selectedAlerts.includes(alertId)) { setSelectedAlerts(selectedAlerts.filter((id) => id !== alertId)); } else { setSelectedAlerts([...selectedAlerts, alertId]); } }; const handleClearAlerts = () => { setSelectedAlerts([]); }; const handleSubmitConfig = () => { onSubmit?.({ ...cameraConfig, record_type: recordingMode, record_alarm_list: recordingMode === 'alarm' ? selectedAlerts : [], }); }; return ( {/* Recording Mode */}
{intl.formatMessage({ id: 'master.devices.camera.config.recording', defaultMessage: 'Ghi dữ liệu camera', })}