package com.pm.subsystem.service.impl;

import java.util.List;
import java.util.Arrays;
import com.pm.common.utils.DateUtils;
import com.pm.common.utils.SecurityUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.pm.subsystem.mapper.LightingMapper;
import com.pm.subsystem.service.ILightingService;
import com.pm.common.config.PageData;

/**
 * 照明系统Service业务层处理
 * 
 * @author pm
 * @date 2025-01-01
 */
@Service
public class LightingServiceImpl implements ILightingService
{
    @Autowired
    private LightingMapper lightingMapper;

    /**
     * 查询照明设备列表
     * 
     * @param pd 查询参数
     * @return 照明设备
     */
    @Override
    public List<PageData> selectLightingDeviceList(PageData pd)
    {
        // 模拟从第三方接口获取数据
        List<PageData> list = lightingMapper.selectLightingDeviceList(pd);
        // 这里可以调用第三方接口获取实时数据并更新
        for (PageData device : list) {
            // 模拟获取实时状态
            device.put("last_update_time", DateUtils.getTime());
        }
        return list;
    }

    /**
     * 控制照明设备
     * 
     * @param pd 控制参数
     * @return 结果
     */
    @Override
    public int controlLightingDevice(PageData pd)
    {
        // 调用第三方接口发送控制命令
        String deviceCode = pd.getString("deviceCode");
        Integer action = (Integer)pd.get("action");
        Integer brightness = (Integer)pd.get("brightness");
        
        // TODO: 调用实际的照明系统接口
        // boolean result = callThirdPartyAPI(deviceCode, action, brightness);
        
        // 更新本地数据库状态
        pd.put("status", action);
        pd.put("brightness", brightness);
        pd.put("lastUpdateTime", DateUtils.getTime());
        
        return lightingMapper.updateLightingDevice(pd);
    }

    /**
     * 批量控制照明
     * 
     * @param pd 控制参数
     * @return 结果
     */
    @Override
    public int batchControlLighting(PageData pd)
    {
        String deviceCodes = pd.getString("deviceCodes");
        Integer action = (Integer)pd.get("action");
        Integer brightness = (Integer)pd.get("brightness");
        
        String[] codes = deviceCodes.split(",");
        int count = 0;
        
        for (String code : codes) {
            PageData controlPd = new PageData();
            controlPd.put("deviceCode", code);
            controlPd.put("action", action);
            controlPd.put("brightness", brightness);
            count += controlLightingDevice(controlPd);
        }
        
        return count;
    }

    /**
     * 查询照明报警列表
     * 
     * @param pd 查询参数
     * @return 报警
     */
    @Override
    public List<PageData> selectLightingAlarmList(PageData pd)
    {
        return lightingMapper.selectLightingAlarmList(pd);
    }

    /**
     * 处理照明报警
     * 
     * @param pd 处理参数
     * @return 结果
     */
    @Override
    public int handleLightingAlarm(PageData pd)
    {
        pd.put("handleStatus", 1);
        pd.put("handleTime", DateUtils.getTime());
        pd.put("handleUser", SecurityUtils.getUsername());
        return lightingMapper.updateLightingAlarm(pd);
    }

    /**
     * 查询照明计划列表
     * 
     * @param pd 查询参数
     * @return 计划
     */
    @Override
    public List<PageData> selectLightingScheduleList(PageData pd)
    {
        return lightingMapper.selectLightingScheduleList(pd);
    }

    /**
     * 新增照明计划
     * 
     * @param pd 计划信息
     * @return 结果
     */
    @Override
    public int insertLightingSchedule(PageData pd)
    {
        pd.put("createTime", DateUtils.getTime());
        return lightingMapper.insertLightingSchedule(pd);
    }

    /**
     * 修改照明计划
     * 
     * @param pd 计划信息
     * @return 结果
     */
    @Override
    public int updateLightingSchedule(PageData pd)
    {
        pd.put("updateTime", DateUtils.getTime());
        return lightingMapper.updateLightingSchedule(pd);
    }

    /**
     * 删除照明计划
     * 
     * @param id 计划ID
     * @return 结果
     */
    @Override
    public int deleteLightingSchedule(Long id)
    {
        return lightingMapper.deleteLightingSchedule(id);
    }
}