package com.pz.system.service.impl;

import cn.hutool.core.bean.BeanUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.pz.common.core.domain.BaseEntity;
import com.pz.common.core.domain.PageQuery;
import com.pz.common.core.page.TableDataInfo;
import com.pz.system.domain.Department;
import com.pz.system.domain.Hospital;
import com.pz.system.domain.Information;
import com.pz.system.domain.Message;
import com.pz.system.domain.bo.DepartmentBo;
import com.pz.system.domain.bo.MessageBo;
import com.pz.system.domain.vo.DepartmentVo;
import com.pz.system.domain.vo.InformationVo;
import com.pz.system.domain.vo.MessageVo;
import com.pz.system.mapper.DepartmentMapper;
import com.pz.system.mapper.HospitalMapper;
import com.pz.system.mapper.MessageMapper;
import com.pz.system.mapper.SessionListMapper;
import com.pz.system.service.IDepartmentService;
import com.pz.system.service.IMessageService;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;

import java.text.SimpleDateFormat;
import java.util.*;
import java.util.stream.Collectors;

/**
 * 科室Service业务层处理
 *
 * @author ruoyi
 * @date 2023-09-07
 */
@RequiredArgsConstructor
@Service
public class MessageServiceImpl implements IMessageService {

    private final MessageMapper baseMapper;

    @Override
    public List<MessageVo> queryPageList(MessageBo bo) {
        String strTime = bo.getStrTime() + " 00:00:00";
        bo.setStrTime(bo.getStrTime() + " 23:59:59");
        List<MessageVo> result = new ArrayList<>();
        result = baseMapper.selectVoList(new LambdaQueryWrapper<Message>().eq(Message::getSender, bo.getSender())
            .eq(Message::getReceiver, bo.getReceiver()).ge(BaseEntity::getCreateTime, strTime).le(BaseEntity::getCreateTime, bo.getStrTime()).or().eq(Message::getSender, bo.getReceiver()).eq(Message::getReceiver, bo.getSender())
            .ge(BaseEntity::getCreateTime, strTime).le(BaseEntity::getCreateTime, bo.getStrTime()));

        List<Message> messageList = new ArrayList<>();
        if (CollectionUtils.isNotEmpty(result)) {
            result.forEach(res -> {
                if (res.getIsRead().equals("0") && res.getReceiver().equals(bo.getSender())) {
                    res.setIsRead("1");
                    messageList.add(BeanUtil.toBean(res, Message.class));
                }
            });
        }
        //批量更新已读
        if (CollectionUtils.isNotEmpty(messageList)) {
            baseMapper.updateBatchById(messageList);
        }
        return result;
    }

    @Override
    public List<String> queryMessageTimeList(Long userId, Long toUserId) {
        List<MessageVo> messageVos = baseMapper.selectVoList(new LambdaQueryWrapper<Message>().eq(Message::getSender, userId)
            .eq(Message::getReceiver, toUserId).or().eq(Message::getSender, toUserId).eq(Message::getReceiver, userId)
            .orderByDesc(BaseEntity::getCreateTime));

        if (CollectionUtils.isNotEmpty(messageVos)) {
            List<Date> times = messageVos.stream().map(MessageVo::getCreateTime).collect(Collectors.toList());

            List<String> formattedDateList = new ArrayList<>();

            SimpleDateFormat outputFormat = new SimpleDateFormat("yyyy-MM-dd");

            for (Date date : times) {
                // 格式化为目标格式
                String formattedDate = outputFormat.format(date);
                // 添加到新的列表
                formattedDateList.add(formattedDate);
            }
            List<String> newList = formattedDateList.stream()
                .distinct()
                .sorted(Comparator.reverseOrder())
                .collect(Collectors.toList());
            return newList;
        }
        return null;
    }
}