package cn.ey.biz.module.system.service.wiki;

import cn.ey.biz.module.system.controller.admin.wiki.vo.WikiPageAndContentRespVO;
import cn.ey.biz.module.system.controller.admin.wiki.vo.WikiPageContentRespVO;
import cn.ey.biz.module.system.controller.admin.wiki.vo.WikiPageRespVO;
import cn.ey.biz.module.system.controller.admin.wiki.vo.WikiSpacePageCreateReqVO;
import cn.ey.biz.module.system.convert.wiki.WikiSpaceConvert;
import cn.ey.biz.module.system.dal.dataobject.wiki.WikiPageContentDO;
import cn.ey.biz.module.system.dal.dataobject.wiki.WikiPageDO;
import cn.ey.biz.module.system.dal.mapper.wiki.WikiPageContentMapper;
import cn.ey.biz.module.system.dal.mapper.wiki.WikiPageMapper;
import cn.hutool.core.collection.CollectionUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.List;

@Service
public class WikiPageServiceImpl implements WikiPageService {

    @Resource
    private WikiPageMapper wikiPageMapper;

    @Resource
    private WikiPageContentMapper wikiPageContentMapper;


    @Override
    public List<WikiPageRespVO> getPageList(Long id) {
        LambdaQueryWrapper<WikiPageDO> wrappers = Wrappers.lambdaQuery(WikiPageDO.class)
                .eq(WikiPageDO::getSpaceId, id);
        List<WikiPageDO> wikiPageDO=wikiPageMapper.selectList(wrappers);
        List<WikiPageRespVO> wikiPageRespVOList=WikiSpaceConvert.INSTANCE.convertList(wikiPageDO);
        return wikiPageRespVOList;
    }

    @Override
    public WikiPageAndContentRespVO getPageContent(Long id) {
        WikiPageDO wikiPageDO=wikiPageMapper.selectById(id);
        WikiPageRespVO wikiPageRespVOList=WikiSpaceConvert.INSTANCE.convertPage(wikiPageDO);

        LambdaQueryWrapper<WikiPageContentDO> wrappers = Wrappers.lambdaQuery(WikiPageContentDO.class)
                .eq(WikiPageContentDO::getPageId, id);
        List<WikiPageContentDO> wikiPageContentList=wikiPageContentMapper.selectList(wrappers);
        List<WikiPageContentRespVO>  contentRespVOList=WikiSpaceConvert.INSTANCE.convertContentList(wikiPageContentList);

        WikiPageAndContentRespVO  pageAndContent= new WikiPageAndContentRespVO();
        pageAndContent.setPage(wikiPageRespVOList);
        if(CollectionUtil.isNotEmpty(contentRespVOList)){
            pageAndContent.setContent(contentRespVOList.get(0));
        }
        return pageAndContent;
    }

    @Override
    public void deletePage(Long id) {
        //删除目录
        wikiPageMapper.deleteById(id);

        //删除目录对应下的内容
        LambdaQueryWrapper<WikiPageContentDO> wrappers = Wrappers.lambdaQuery(WikiPageContentDO.class)
                .eq(WikiPageContentDO::getPageId, id);
        List<WikiPageContentDO> wikiPageContentList=wikiPageContentMapper.selectList(wrappers);
        wikiPageContentMapper.deleteBatchIds(wikiPageContentList);
    }

    @Override
    public Long createWikiSpacePage(WikiSpacePageCreateReqVO createReqVO) {
        if(createReqVO.getPageId()!=null){
            //编辑
            //目录表
            WikiPageDO wikiPageDO=new WikiPageDO();
            wikiPageDO.setId(createReqVO.getPageId());
            wikiPageDO.setName(createReqVO.getName());
            wikiPageDO.setParentId(createReqVO.getParentId());
            wikiPageDO.setEditorType(createReqVO.getEditorType());
            wikiPageMapper.updateById(wikiPageDO);
            //内容表
            if(createReqVO.getContentId()!=null){
                WikiPageContentDO content=new WikiPageContentDO();
                content.setId(createReqVO.getContentId());
                content.setContent(createReqVO.getContent());
                wikiPageContentMapper.updateById(content);
            }
            return wikiPageDO.getId();
        }else{
            //新增
            //目录表
            WikiPageDO wikiPageDO=new WikiPageDO();
            wikiPageDO.setSpaceId(createReqVO.getSpaceId());
            wikiPageDO.setName(createReqVO.getName());
            wikiPageDO.setParentId(createReqVO.getParentId());
            wikiPageDO.setEditorType(createReqVO.getEditorType());
            wikiPageMapper.insert(wikiPageDO);
            //内容表
            WikiPageContentDO content=new WikiPageContentDO();
            content.setPageId(wikiPageDO.getId());
            content.setContent(createReqVO.getContent());
            wikiPageContentMapper.insert(content);
            return wikiPageDO.getId();
        }
    }

}
