package com.emotion.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.emotion.common.PageResult;
import com.emotion.dto.request.DiaryPostCreateRequest;
import com.emotion.dto.request.DiaryPostPageRequest;
import com.emotion.dto.request.DiaryPostUpdateRequest;
import com.emotion.dto.response.DiaryPostResponse;
import com.emotion.entity.DiaryPost;

import java.math.BigDecimal;
import java.util.List;

/**
 * 用户日记服务接口
 * 
 * @author huazhongmin
 * @date 2025-07-23
 */
public interface DiaryPostService extends IService<DiaryPost> {
    
    /**
     * 分页查询日记
     */
    PageResult<DiaryPostResponse> getPageWithResponse(DiaryPostPageRequest request);

    /**
     * 根据ID获取日记响应
     */
    DiaryPostResponse getDiaryPostResponseById(String id);

    /**
     * 创建日记并返回响应对象
     */
    DiaryPostResponse createDiaryPostWithResponse(DiaryPostCreateRequest request);

    /**
     * 更新日记并返回响应对象
     */
    DiaryPostResponse updateDiaryPostWithResponse(DiaryPostUpdateRequest request);

    /**
     * 删除日记
     */
    boolean deleteDiaryPost(String diaryId);
    
    /**
     * 软删除日记
     */
    boolean softDeleteDiaryPost(String diaryId);
    
    /**
     * 恢复日记
     */
    boolean restoreDiaryPost(String diaryId);
    
    /**
     * 增加浏览数
     */
    boolean incrementViewCount(String diaryId);
    
    /**
     * 增加点赞数
     */
    boolean incrementLikeCount(String diaryId);
    
    /**
     * 减少点赞数
     */
    boolean decrementLikeCount(String diaryId);
    
    /**
     * 增加评论数
     */
    boolean incrementCommentCount(String diaryId);
    
    /**
     * 减少评论数
     */
    boolean decrementCommentCount(String diaryId);
    
    /**
     * 增加分享数
     */
    boolean incrementShareCount(String diaryId);
    
    /**
     * 更新最后评论时间
     */
    boolean updateLastCommentTime(String diaryId);
    
    /**
     * 设置精选状态
     */
    boolean setFeatured(String diaryId, Integer featured);
    
    /**
     * 设置置顶优先级
     */
    boolean setPriority(String diaryId, Integer priority);
    
    /**
     * 统计用户日记数量
     */
    Long countByUserId(String userId);
    
    /**
     * 统计用户公开日记数量
     */
    Long countPublicByUserId(String userId);
    
    /**
     * 统计精选日记数量
     */
    Long countFeatured();

    /**
     * 发表日记并生成AI评论
     */
    DiaryPostResponse publishDiaryWithAiComment(DiaryPostCreateRequest request);
}