package com.app.service.info;

import com.app.dto.PageResult;
import com.app.dto.basics.operation.NewsDto;
import com.app.dto.basics.search.SearchNewsDto;
import com.app.dto.info.ResponseNewsDto;
import com.app.entity.info.News;
import com.app.mapper.info.NewsMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils;

import javax.annotation.Resource;
import java.util.Optional;

/**
 * 功能描述：新闻资讯
 *
 * @author 禤润峰
 * @date 2021年1月15日10点20分
 */
@Slf4j
@Service
public class NewsService {

    @Resource
    private NewsMapper newsMapper;

    public News findNewsById(String newsId) {
       return newsMapper.selectById(newsId);
    }

    /**
     * 查询【新闻资讯】分页
     *
     * @param dto 搜索dto
     * @return 分页结果
     */
    public PageResult<ResponseNewsDto> page(SearchNewsDto dto) {
        // TODO: 1. 平台账号。看到所有数据 2. 教育部门账号。看到教育部门所有数据 3. 机构账号。看到自己发的所有数据
        IPage<ResponseNewsDto> iPage = newsMapper.page(dto,new Page<>(dto.getPage(), dto.getSize()));
        return new PageResult<>(dto.getPage(), dto.getSize(), iPage.getTotal(), iPage.getRecords());
    }

    /**
     * 功能描述：查看新闻资讯详情（阅读数 + 1）
     *
     * @param newsId 新闻资讯标识
     * @return
     */
    public News findById(String newsId) {
        News _news = newsMapper.selectById(newsId);

        _news.setReadNum(_news.getReadNum() + 1);
        newsMapper.updateById(_news);

        return _news;
    }

    /**
     * 保存或更新【新闻资讯】
     *
     * @param dto 新闻资讯dto
     * @return 新闻资讯实体
     */
    public News saveOrUpdate(NewsDto dto) {
        News _news = null;
        if (StringUtils.isEmpty(dto.getId())) {
            _news = new News();
            _news.setAuthor(dto.getAuthor());
            _news.setContent(dto.getContent());
            _news.setTitle(dto.getTitle());
            _news.setOrganId(dto.getOrganId());
            newsMapper.insert(_news);
        } else {
            Optional<News> newsOptional = Optional.ofNullable(newsMapper.selectById(dto.getId()));
            if (newsOptional.isPresent()) {
                _news = newsOptional.get();
                _news.setAuthor(dto.getAuthor());
                _news.setContent(dto.getContent());
                _news.setImages(dto.getImages());
                _news.setTitle(dto.getTitle());
                _news.setOrganId(dto.getOrganId());
                newsMapper.updateById(_news);
            }
        }
        return _news;
    }

    /**
     * 替换[新闻资讯]删除状态
     *
     * @param id 新闻资讯Id
     */
    public void handleIsDel(String id) {
        Optional<News> optional = Optional.ofNullable(newsMapper.selectById(id));
        if (optional.isPresent()) {
            News news = optional.get();
            news.setIsDel(!news.getIsDel());
            newsMapper.updateById(news);
        }
    }
}
