package com.yunzhupaas.onlinedev.service.impl;

import cn.hutool.core.util.ObjectUtil;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.yunzhupaas.base.service.SuperServiceImpl;
import com.yunzhupaas.onlinedev.entity.VisualPersonalEntity;
import com.yunzhupaas.onlinedev.mapper.VisualPersonalMapper;
import com.yunzhupaas.onlinedev.model.DataInfoVO;
import com.yunzhupaas.onlinedev.model.personalList.VisualPersConst;
import com.yunzhupaas.onlinedev.model.personalList.VisualPersonalInfo;
import com.yunzhupaas.onlinedev.model.personalList.VisualPersonalVo;
import com.yunzhupaas.onlinedev.service.VisualPersonalService;
import com.yunzhupaas.util.JsonUtil;
import com.yunzhupaas.util.StringUtil;
import com.yunzhupaas.util.UserProvider;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.ArrayList;
import java.util.List;
import java.util.Objects;

/**
 * 个性化列表视图服务实现
 *
 * @author 云筑产品开发平台组
 * @version v5.1.0
 * @copyright 深圳市乐程软件有限公司
 * @date 2024/8/27 18:24:42
 */
@Service
public class VisualPersonalServiceImpl extends SuperServiceImpl<VisualPersonalMapper, VisualPersonalEntity> implements VisualPersonalService {

    

    @Override
    public List<VisualPersonalEntity> getList(String menuId) {
        QueryWrapper<VisualPersonalEntity> queryWrapper = new QueryWrapper<>();
//        queryWrapper.lambda().select(
//                VisualPersonalEntity::getId,
//                VisualPersonalEntity::getMenuId,
//                VisualPersonalEntity::getType,
//                VisualPersonalEntity::getStatus,
//                VisualPersonalEntity::getFullName
//        );
        queryWrapper.lambda().eq(VisualPersonalEntity::getMenuId, menuId);
        queryWrapper.lambda().eq(VisualPersonalEntity::getCreatorUserId, UserProvider.getUser().getUserId());
        return this.list(queryWrapper);
    }

    @Override
    public List<VisualPersonalVo> getListVo(String menuId) {
        List<VisualPersonalVo> listVo = new ArrayList<>();
        //个人视图
        List<VisualPersonalEntity> list = this.getList(menuId);
        VisualPersonalEntity defaultEntity = list.stream().filter(t -> Objects.equals(1, t.getStatus())).findFirst().orElse(null);
        //添加系统视图
        Integer status = ObjectUtil.isEmpty(defaultEntity) ? 1 : 0;
        VisualPersonalVo vo = new VisualPersonalVo();
        vo.setId(VisualPersConst.SYSTEM_ID);
        vo.setFullName(VisualPersConst.SYSTEM_NAME);
        vo.setStatus(status);
        vo.setType(0);
        listVo.add(vo);
        for (VisualPersonalEntity item : list) {
            VisualPersonalVo personalVo = JsonUtil.getJsonToBean(item, VisualPersonalVo.class);
            listVo.add(personalVo);
        }
        return listVo;
    }

    @Override
    public VisualPersonalInfo getInfo(String id) {
        VisualPersonalInfo info = null;
        if (ObjectUtil.isNotEmpty(id) && !VisualPersConst.SYSTEM_ID.equals(id)) {
            VisualPersonalEntity entity = this.getById(id);
            if (entity != null) {
                info = JsonUtil.getJsonToBean(entity, VisualPersonalInfo.class);
            }
        }
        return info;
    }

    @Override
    public boolean isExistByFullName(String fullName, String id, String menuId) {
        if (VisualPersConst.SYSTEM_NAME.equals(fullName)) return true;
        QueryWrapper<VisualPersonalEntity> queryWrapper = new QueryWrapper<>();
        queryWrapper.lambda().eq(VisualPersonalEntity::getFullName, fullName);
        if (!StringUtils.isEmpty(id)) {
            queryWrapper.lambda().ne(VisualPersonalEntity::getId, id);
        }
        queryWrapper.lambda().eq(VisualPersonalEntity::getMenuId, menuId);
        return this.count(queryWrapper) > 0 ? true : false;
    }

    @Override
    public void setDataInfoVO(String menuId, DataInfoVO dataInfoVO) {
        List<VisualPersonalVo> listVo = StringUtil.isNotEmpty(menuId) ? this.getListVo(menuId) : new ArrayList<>();
        dataInfoVO.setPersonalList(listVo);
        VisualPersonalVo personalVo = listVo.stream().filter(t -> Objects.equals(1, t.getStatus())).findFirst().orElse(null);
        String id = ObjectUtil.isEmpty(personalVo) ? null : personalVo.getId();
        VisualPersonalInfo info = this.getInfo(id);
        dataInfoVO.setDefaultView(info);
    }
}

