package com.zcxk.rmcp.web.service.impl;

import com.github.pagehelper.page.PageMethod;
import com.zcxk.core.common.util.BeanCopyUtils;
import com.zcxk.core.mysql.pageing.Pagination;
import com.zcxk.core.oauth2.util.UserUtil;
import com.zcxk.rmcp.api.dto.alarm.AlarmTypeDto;
import com.zcxk.rmcp.api.dto.alarm.AlarmTypePageDto;
import com.zcxk.rmcp.core.dao.AlarmTypeMapper;
import com.zcxk.rmcp.core.entity.AlarmType;
import com.zcxk.rmcp.web.service.AlarmTypeService;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;

import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.List;
/**
 *
 * @author heyumin
 * @date 2021-07-30 9:44
 */
@Service
public class AlarmTypeServiceImpl implements AlarmTypeService {
    @Resource
    AlarmTypeMapper alarmTypeMapper;
    @Override
    public Pagination<AlarmTypeDto> getAlarmTypePage(AlarmTypePageDto alarmTypePageDto) {
        PageMethod.startPage(alarmTypePageDto.getPageNum(),alarmTypePageDto.getPageSize());
        alarmTypePageDto.setTenantId(UserUtil.getCurrentUser().getTenantId());
        List<AlarmTypeDto> alarmTypes = alarmTypeMapper.selectList(alarmTypePageDto);
        if (CollectionUtils.isEmpty(alarmTypes)){
            return new Pagination<>();
        }
        return new Pagination<>(alarmTypes);
    }

    @Override
    public void add(AlarmTypeDto alarmTypeDto) {
        AlarmType alarmType=new AlarmType();
        alarmType.setStatus(1);
        alarmType.setAlarmStatus(1);
        alarmType.setTenantId(UserUtil.getCurrentUser().getTenantId());
        BeanCopyUtils.copyProperties(alarmTypeDto, alarmType, AlarmType.class);
        alarmTypeMapper.insert(alarmType);
    }

    @Override
    public void edit(AlarmTypeDto alarmTypeDto) {
        AlarmType alarmType=new AlarmType();
        BeanCopyUtils.copyProperties(alarmTypeDto, alarmType, AlarmType.class);
        alarmTypeMapper.update(alarmType);
    }

    @Override
    public int delete(List<Integer> ids) {
        List<AlarmTypeDto> alarmTypes=alarmTypeMapper.selectTypesWithRules(ids);
        if(CollectionUtils.isEmpty(alarmTypes)){
            alarmTypeMapper.delete(ids);
            return 0;
        }
        return 1;
    }

    @Override
    public int deleteAll() {
        AlarmTypePageDto alarmTypePageDto = new AlarmTypePageDto();
        alarmTypePageDto.setTenantId(UserUtil.getCurrentUser().getTenantId());
        List<AlarmTypeDto>alarmTypeDtos=alarmTypeMapper.selectList(alarmTypePageDto);
        List<Integer>ids=new ArrayList<>();
        alarmTypeDtos.forEach(alarmTypeDto -> ids.add(alarmTypeDto.getId())
        );
        List<AlarmTypeDto>alarmTypes=alarmTypeMapper.selectTypesWithRules(ids);
        if(CollectionUtils.isEmpty(alarmTypes)){
            alarmTypeMapper.delete(ids);
            return 0;
        }
        return 1;
    }

    @Override
    public void updateStatus(Integer id) {
        AlarmType alarmType = alarmTypeMapper.selectById(id);
        if (alarmType != null) {
            alarmType.setId(id);
            if (alarmType.getAlarmStatus() == 1) {
                //禁用
                alarmType.setAlarmStatus(2);
            } else {
                //正常
                alarmType.setAlarmStatus(1);
            }
           alarmTypeMapper.update(alarmType);

        }

    }

    @Override
    public List<AlarmTypeDto> getAlarmTypeList() {
        AlarmTypePageDto alarmTypePageDto = new AlarmTypePageDto();
        alarmTypePageDto.setTenantId(UserUtil.getCurrentUser().getTenantId());
        List<AlarmTypeDto>alarmTypeDtos=alarmTypeMapper.selectList(alarmTypePageDto);
        return alarmTypeDtos;
    }
}
