package com.ruoyi.app.controller;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.ruoyi.app.annotation.LoginAppUser;
import com.ruoyi.app.controller.base.AppBaseController;
import com.ruoyi.app.domain.*;
import com.ruoyi.app.domain.vo.AppMemberVo;
import com.ruoyi.app.service.ITbFamilyMemberService;
import com.ruoyi.app.service.ITbFamilyService;
import com.ruoyi.app.service.ITbMyPublishService;
import com.ruoyi.app.service.ITbPublishCommentService;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.utils.StringUtils;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.RequiredArgsConstructor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.Date;
import java.util.List;

/**
 * 评论
 *
 * @author Alex
 * @date 2020-10-09
 */
@Api(value = "评论管理", tags = "评论管理")
@RequiredArgsConstructor(onConstructor_ = @Autowired)
@RestController
@RequestMapping("/app/comment")
public class PublishCommentController extends AppBaseController {

    private final ITbPublishCommentService commentService;
    private final ITbMyPublishService publishService;
    private final ITbFamilyService familyService;
    private final ITbFamilyMemberService memberService;
    /**
     * 添加评论
     *
     * @param comment
     * @return
     */
    @ApiOperation("添加评论")
    @GetMapping("/add")
    public AjaxResult addComment(TbPublishComment comment) {
        if (comment.getPublishId() == null || comment.getAppUserId() == null) {
            return AjaxResult.error("参数为空");
        }
        if (StringUtils.isBlank(comment.getContents())) {
            return AjaxResult.error("评论内容不能为空");
        }
        AppMemberVo user = getLoginUser().getUser();
        comment.setCreateBy(user.getUserId().toString());
        comment.setCreateTime(new Date());
        if (commentService.save(comment)) {
            Long familyId = null;
            // 获取登录人所在的家族id
            TbFamilyMember member = memberService.getOne(new LambdaQueryWrapper<TbFamilyMember>()
                    .eq(TbFamilyMember::getAppUserId,user.getUserId())
                    .last("limit 1")
            );
            if (member != null) {
                TbFamily family = familyService.myFamily(member.getId());
                if (family != null) {
                    familyId = family.getId();
                }
            }
            // 获取登录人的所有好友和所在家族的所有族友的id
            List<Long> fids = publishService.getMyFrientIds(user.getUserId(),familyId);
            //返回评论列表
            List<TbPublishComment> list = commentService.selectList(new LambdaQueryWrapper<TbPublishComment>()
                    .eq(TbPublishComment::getPublishId, comment.getPublishId())
                    .in(fids.size() > 0,TbPublishComment::getAppUserId, fids)
            );

            return AjaxResult.success(list);
        }
        return AjaxResult.error("评论失败");
    }
}