'use client' import { useState, useEffect } from 'react' interface DeviceCardProps { id: string name: string icon: string entityId?: string domain?: string initialState: boolean isMock?: boolean extraInfo?: string } export default function DeviceCard({ id, name, icon, entityId, domain, initialState, isMock = false, extraInfo, }: DeviceCardProps) { const [isOn, setIsOn] = useState(initialState) const [synced, setSynced] = useState(false) const [loading, setLoading] = useState(false) // Sync from HA only once — when real data first arrives (not mock default) useEffect(() => { if (!synced && !isMock) { setIsOn(initialState) setSynced(true) } }, [initialState, isMock, synced]) const toggle = async () => { const next = !isOn setIsOn(next) // optimistic if (!isMock && entityId && domain) { setLoading(true) try { await fetch('/api/ha', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ domain, service: next ? 'turn_on' : 'turn_off', entity_id: entityId, }), }) } catch { setIsOn(!next) } finally { setLoading(false) } } } const accent = '#00d4ff' return (