package com.zksy.base.manhole.service.impl;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.zksy.base.manhole.domain.ManholeData;
import com.zksy.base.manhole.mapper.ManholeDataMapper;
import com.zksy.base.manhole.service.ManholeDataService;
import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils;

import java.time.LocalDateTime;
import java.util.List;
import java.util.Map;

/**
 * @author Administrator
 * @version 1.0
 * @project dh-server-micro
 * @description
 * @date 2025/2/20 10:55:03
 */
@Service
public class ManholeDataServiceImpl extends ServiceImpl<ManholeDataMapper, ManholeData> implements ManholeDataService {

    @Override
    public IPage<ManholeData> queryPage(Page<ManholeData> page, String imeiCardNumber, LocalDateTime startTime, LocalDateTime endTime) {
        LambdaQueryWrapper<ManholeData> wrapper = new LambdaQueryWrapper<>();
        if (StringUtils.hasText(imeiCardNumber)) {
            wrapper.eq(ManholeData::getImeiCardNumber, imeiCardNumber);
        }
        if (startTime != null) {
            wrapper.ge(ManholeData::getCreateTime, startTime);
        }
        if (endTime != null) {
            wrapper.le(ManholeData::getCreateTime, endTime);
        }
        wrapper.orderByDesc(ManholeData::getCreateTime);
        return this.page(page, wrapper);
    }

    @Override
    public List<Map<String, Object>> statManholeByDevice(LocalDateTime startTime, LocalDateTime endTime) {
        return baseMapper.statManholeByDevice(startTime, endTime);
    }

    @Override
    public List<Map<String, Object>> statAlarmTrendByHour(String imeiCardNumber, LocalDateTime startTime, LocalDateTime endTime) {
        return baseMapper.statAlarmTrendByHour(imeiCardNumber, startTime, endTime);
    }

    @Override
    public List<Map<String, Object>> statTemperatureTrendByHour(String imeiCardNumber, LocalDateTime startTime, LocalDateTime endTime) {
        return baseMapper.statTemperatureTrendByHour(imeiCardNumber, startTime, endTime);
    }

    @Override
    public List<String> getAllImeiCardNumbers() {
        return baseMapper.getAllImeiCardNumbers();
    }

    @Override
    public Map<String, Object> getLatestDataByImei(String imeiCardNumber) {
        return baseMapper.getLatestDataByImei(imeiCardNumber);
    }

    @Override
    public Map<String, Object> getOverallStatistics(LocalDateTime startTime, LocalDateTime endTime) {
        return baseMapper.getOverallStatistics(startTime, endTime);
    }

    @Override
    public IPage<ManholeData> queryAlarmData(Page<ManholeData> page, String imeiCardNumber, LocalDateTime startTime, LocalDateTime endTime) {
        LambdaQueryWrapper<ManholeData> wrapper = new LambdaQueryWrapper<>();
        if (StringUtils.hasText(imeiCardNumber)) {
            wrapper.eq(ManholeData::getImeiCardNumber, imeiCardNumber);
        }
        if (startTime != null) {
            wrapper.ge(ManholeData::getCreateTime, startTime);
        }
        if (endTime != null) {
            wrapper.le(ManholeData::getCreateTime, endTime);
        }
        wrapper.and(w -> w.eq(ManholeData::getAlarmStatus, "1")
                .or()
                .eq(ManholeData::getWaterInfiltrationAlarmStatus, "1")
                .or()
                .eq(ManholeData::getWaterLevelAlarmStatus, "1"));
        wrapper.orderByDesc(ManholeData::getCreateTime);
        return this.page(page, wrapper);
    }
}
