package org.dromara.zhishu.util;

import com.hankcs.hanlp.HanLP;
import com.hankcs.hanlp.seg.common.Term;

import java.awt.*;
import java.util.ArrayList;
import java.util.List;


public class ContentUtils {



    /**
     * 在章节词（如 第一、第1）前插入换行符
     */
    public static String insertLineBreakBeforeChapter(String text) {
        // 匹配 "第一章"、"第一节"、"第1章"、"第12节"
        return text.replaceAll("(第[一二三四五六七八九十零百千万]+[章|节]|第\\d+[章|节])", "\n$1");    }

    /**
     * 判断字符串是否为章节标题格式，如：
     * 第一章、第一节、第一、第1章、第1节
     */
    public static boolean isChapterTitle(String word) {
        return word.matches("第[一二三四五六七八九十零百千万]+[章|节]") ||   // 中文数字 + 章/节
                word.matches("第\\d+[章|节]");                             // 阿拉伯数字 + 章/节
    }

    public static String applyLineBreaks(String text) {
        List<String> sentences = new ArrayList<>();
        StringBuilder sb = new StringBuilder();

//        // 先预处理文本，在章节词前加换行符
        String processedText = insertLineBreakBeforeChapter(text);

        List<Term> terms = HanLP.segment(processedText);
        for (Term term : terms) {
                if (term.word.equals("。") || term.word.equals("！") || term.word.equals("？") || term.word.equals("，")) {
                // 标点断句逻辑保持不变
                sb.append(term.word);
                sentences.add(sb.toString());
                sb = new StringBuilder();
            } else {
                sb.append(term.word);
            }
        }

        // 添加最后一段未闭合的内容
        if (sb.length() > 0) {
            //根据 \n 换行符 截断生成数组
            String[] words = sb.toString().split("\n");
            for(int i=0;i<words.length;i++){
                if(i == 0){
                    sentences.add("\n" + words[i]);
                }else{
                    sentences.add(words[i]);
                }

            }
        }

        StringBuilder result = new StringBuilder();
        for (String sentence : sentences) {
            int len = sentence.length();
            int start = 0;
            while (start < len) {
                int end = Math.min(start + 37, len);
                result.append(sentence.substring(start, end)).append("\n");
                start = end;
            }
        }

        return result.toString();
    }



    /**
     * 截断字符串以适应指定宽度，并添加省略号
     */
    public static String truncateLineToFit(String text, int maxWidth, FontMetrics fm, String ellipsis) {
        int textWidth = fm.stringWidth(text);
        if (textWidth <= maxWidth) {
            return text;
        }

        // 二分法查找最大可容纳长度
        int low = 0, high = text.length(), mid;
        while (low < high) {
            mid = (low + high + 1) / 2;
            String sub = text.substring(0, mid) + ellipsis;
            if (fm.stringWidth(sub) <= maxWidth) {
                low = mid;
            } else {
                high = mid - 1;
            }
        }

        return text.substring(0, low) + ellipsis;
    }

}
