package com.test.bijihoudaun.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.test.bijihoudaun.entity.MarkdownFile;
import com.test.bijihoudaun.entity.MarkdownFileChunk;
import com.test.bijihoudaun.entity.MarkdownFileVO;

import java.util.List;

public interface MarkdownFileService extends IService<MarkdownFile> {

    /**
     * 更新Markdown内容
     * @return 更新后的文件对象
     */
    MarkdownFile updateMarkdownContent(MarkdownFile markdownFile);
    
    /**
     * 根据ID获取Markdown文件
     * @param id 文件ID
     * @param isAuthenticated 是否已认证
     * @return Markdown文件对象
     */
    MarkdownFile getMarkdownById(Long id, boolean isAuthenticated);

    
    /**
     * 根据分组ID获取Markdown文件
     * @param groupingId 分组ID
     * @return 文件列表
     */
    List<MarkdownFileVO> getFilesByGroupingId(Long groupingId);
    
    /**
     * 删除Markdown文件
     * @param id 文件ID
     * @return 是否删除成功
     */
    boolean deleteMarkdownFile(Long id);

    List<MarkdownFile> test();

    /**
     * 获取所有Markdown文件
     * @return 文件列表
     */
    List<MarkdownFile> getAllMarkdownFiles();

    /**
     * 根据标题模糊搜索
     * @param keyword 关键词
     * @param page 页码（从1开始）
     * @param pageSize 每页数量
     * @return 文件列表
     */
    List<MarkdownFile> searchByTitle(String keyword, int page, int pageSize);

    /**
     * 更新Markdown文件标题
     * @param id 文件ID
     * @param title 新标题
     * @return 更新后的文件对象
     */
    MarkdownFile updateMarkdownTitle(Long id, String title);

    /**
     * 获取最近更新的笔记
     * @param limit 数量
     * @return 文件列表
     */
    List<MarkdownFileVO> getRecentFiles(int limit);

    /**
     * 分块加载Markdown文件内容
     * 用于大文件（> 500KB）的分页加载
     * @param id 文件ID
     * @param chunkIndex 块索引（从0开始）
     * @param chunkSize 块大小（字符数），默认10000
     * @param isAuthenticated 是否已认证
     * @return 文件块对象
     */
    MarkdownFileChunk getMarkdownChunk(Long id, int chunkIndex, int chunkSize, boolean isAuthenticated);
}
