/**
 * base_device 页面操作列扩展
 * 按 DeviceGroup 动态渲染对应的操作按钮组件
 * 框架升级不覆盖此文件（extension 目录受保护）
 */
import VideoDeviceActions from '@/views/warehouse/base_device/components/VideoDeviceActions.vue'
import IoTDeviceActions from '@/views/warehouse/base_device/components/IoTDeviceActions.vue'
import AccessDeviceActions from '@/views/warehouse/base_device/components/AccessDeviceActions.vue'
import BarrierDeviceActions from '@/views/warehouse/base_device/components/BarrierDeviceActions.vue'
import AlarmDeviceActions from '@/views/warehouse/base_device/components/AlarmDeviceActions.vue'
import DeviceLivePreview from '@/views/warehouse/base_device/components/DeviceLivePreview.vue'
import PtzControlPanel from '@/views/warehouse/base_device/components/PtzControlPanel.vue'
import RealtimeDataPanel from '@/views/warehouse/base_device/components/RealtimeDataPanel.vue'
import DeviceControlPanel from '@/views/warehouse/base_device/components/DeviceControlPanel.vue'
import DeviceEditDialog from '@/views/warehouse/base_device/components/DeviceEditDialog.vue'
import MapBindingPanel from '@/views/warehouse/base_device/components/MapBindingPanel.vue'

// 按 DeviceGroup 映射操作组件
const actionMap = {
  '视频设备': 'VideoDeviceActions',
  'IoT设备': 'IoTDeviceActions',
  '门禁设备': 'AccessDeviceActions',
  '道闸设备': 'BarrierDeviceActions',
  '报警设备': 'AlarmDeviceActions',
}

export default {
  components: {
    VideoDeviceActions, IoTDeviceActions, AccessDeviceActions, BarrierDeviceActions, AlarmDeviceActions,
    DeviceLivePreview, PtzControlPanel, RealtimeDataPanel, DeviceControlPanel, DeviceEditDialog, MapBindingPanel
  },

  data() {
    return {
      currentDevice: null,
      dialogs: { preview: false, ptz: false, realtime: false, control: false, edit: false, map: false }
    }
  },

  // 替换框架操作列
  slots: {
    'col-action': (h, { row }) => {
      const compName = actionMap[row.deviceGroup]
      if (!compName) return null
      // 渲染自定义按钮组，绑定事件
      return h(compName, {
        props: { row },
        on: {
          preview: () => this.openDialog('preview', row),
          ptz: () => this.openDialog('ptz', row),
          playback: () => console.log('playback', row),
          snapshot: () => console.log('snapshot', row),
          syncChannels: () => console.log('syncChannels', row),
          realtime: () => this.openDialog('realtime', row),
          control: () => this.openDialog('control', row),
          refresh: () => this.$emit('refresh'),
          alarms: () => console.log('alarms', row),
        }
      })
    }
  },

  methods: {
    openDialog(name, device) {
      this.currentDevice = device
      this.dialogs[name] = true
    },
    onRefresh() {
      this.$emit('refresh')
    }
  }
}
