package com.kexue.skills.service;

import com.github.pagehelper.PageInfo;
import com.kexue.skills.entity.CmsContent;
import com.kexue.skills.entity.dto.CmsContentDto;
import com.kexue.skills.entity.request.ImportPathDto;

import java.util.List;

/**
 * (CmsContent)表服务接口
 *
 * @author 王志维
 * @since 2025-02-21 23:01:48
 */
public interface CmsContentService extends BaseService {
    /**
     * 分页查询
     *
     * @param queryDto 筛选条件
     * @return 查询结果
     */
    PageInfo<CmsContent> getPageList(CmsContentDto queryDto);

    /**
     * 查询列表
     *
     * @param queryDto 筛选条件
     * @return 查询结果
     */
    List<CmsContent> getList(CmsContentDto queryDto);

    /**
     * 通过主键查询单条数据
     *
     * @param contentId 主键
     * @return 实例对象
     */
    CmsContent queryById(Long contentId);

    /**
     * 新增数据
     *
     * @param cmsContent 实例对象
     * @return 实例对象
     */
    CmsContent insert(CmsContent cmsContent);

    /**
     * 更新数据
     *
     * @param cmsContent 实例对象
     * @return 实例对象
     */
    CmsContent update(CmsContent cmsContent);

    /**
     * 更新审核状态
     *
     * @param contentId 内容ID
     * @param auditStatus 审核状态
     * @param reviewerId 审核人ID
     * @param reviewerName 审核人名称
     * @param auditComment 审核意见
     * @param updateBy 更新人
     * @return 影响行数
     */
    int updateAuditStatus(Long contentId, Integer auditStatus, Long reviewerId, String reviewerName, String auditComment, String updateBy);

    /**
     * 更新发布状态
     *
     * @param contentId 内容ID
     * @param publishStatus 发布状态
     * @param publishTime 发布时间
     * @param updateBy 更新人
     * @return 影响行数
     */
    int updatePublishStatus(Long contentId, Integer publishStatus, String publishTime, String updateBy);

    /**
     * 增加阅读量
     *
     * @param contentId 内容ID
     * @return 影响行数
     */
    int increaseViewCount(Long contentId);

    /**
     * 通过主键逻辑删除
     *
     * @param contentId 主键
     * @param updateBy 更新人
     * @return 影响行数
     */
    int logicDeleteById(Long contentId, String updateBy);

    /**
     * 通过主键物理删除
     *
     * @param contentId 主键
     * @return 影响行数
     */
    int deleteById(Long contentId);

    /**
     * 添加收藏
     *
     * @param contentId 内容ID
     * @return 影响行数
     */
    int addFavorite(Long contentId);

    /**
     * 取消收藏
     *
     * @param contentId 内容ID
     * @return 影响行数
     */
    int removeFavorite(Long contentId);

    /**
     * 检查用户是否已收藏该内容
     *
     * @param contentId 内容ID
     * @return 是否已收藏
     */
    boolean isFavorited(Long contentId);

    /**
     * 添加查看记录
     *
     * @param contentId 内容ID
     * @return 影响行数
     */
    int addView(Long contentId);

    /**
     * 获取用户历史查看的内容列表
     *
     * @param queryDto 筛选条件，包含分页信息
     * @return 查询结果
     */
    PageInfo<CmsContent> getPageListByUserHistory(CmsContentDto queryDto);

    /**
     * 获取用户收藏的内容列表
     *
     * @param queryDto 筛选条件，包含分页信息
     * @return 查询结果
     */
    PageInfo<CmsContent> getPageListByUserFavorites(CmsContentDto queryDto);

    /**
     * 获取用户购买的内容列表
     *
     * @param queryDto 筛选条件，包含分页信息
     * @return 查询结果
     */
    PageInfo<CmsContent> getPageListByUserPurchases(CmsContentDto queryDto);

    /**
     * 获取用户创建的内容列表
     *
     * @param queryDto 筛选条件，包含分页信息
     * @return 查询结果
     */
    PageInfo<CmsContent> getPageListByUserCreated(CmsContentDto queryDto);

    /**
     * 导入Excel数据到CmsContent
     *
     * @param fileBytes Excel文件字节数组
     * @param createBy 创建人
     * @return 导入结果
     */
    int importFromExcel(byte[] fileBytes, String createBy);
    
    /**
     * 获取CmsContent的content字段内容
     *
     * @param contentId 内容ID
     * @param languageType 语言类型：0 中文，1 英文
     * @return content或contentEn字段的内容
     */
    String getContent(Long contentId, Integer languageType);
    
    /**
     * 获取CmsContent的title字段内容
     *
     * @param contentId 内容ID
     * @return title字段的内容
     */
    String getTitle(Long contentId);
    
    /**
     * 从指定目录导入Excel数据到CmsContent
     *
     * @param importPathDto 导入路径请求参数
     * @param createBy 创建人
     * @return 导入结果
     */
    int importFromPath(ImportPathDto importPathDto, String createBy);
}