"""Markdown转HTML模块"""

import markdown


class MarkdownConverter:
    """Markdown转换器
    
    功能：
    1. 将Markdown转换为HTML
    2. 支持常见Markdown语法
    3. 可配置的转换选项
    """
    
    def __init__(self):
        """初始化转换器"""
        pass
    
    def convert(self, md_text: str, extensions: list = None) -> str:
        """将Markdown转换为HTML
        
        Args:
            md_text: Markdown文本
            extensions: 扩展列表，默认为['extra', 'codehilite', 'toc']
            
        Returns:
            str: HTML字符串
        """
        if extensions is None:
            extensions = ['extra', 'codehilite', 'toc']
        
        # 转换Markdown为HTML
        html = markdown.markdown(md_text, extensions=extensions)
        
        return html
    
    def convert_file(self, md_file: str, extensions: list = None) -> str:
        """从文件转换Markdown为HTML
        
        Args:
            md_file: Markdown文件路径
            extensions: 扩展列表
            
        Returns:
            str: HTML字符串
        """
        # 读取文件，尝试不同编码
        encodings = ['utf-8', 'gbk', 'ansi']
        md_text = None
        
        for encoding in encodings:
            try:
                with open(md_file, 'r', encoding=encoding) as f:
                    md_text = f.read()
                break
            except UnicodeDecodeError:
                continue
        
        if md_text is None:
            raise Exception("无法读取文件：所有编码尝试都失败")
        
        return self.convert(md_text, extensions)
    
    def get_supported_extensions(self) -> list:
        """获取支持的扩展列表
        
        Returns:
            list: 支持的扩展列表
        """
        return [
            'extra',          # 额外功能
            'codehilite',     # 代码高亮
            'toc',            # 目录
            'tables',         # 表格
            'fenced_code',    # 围栏代码块
            'nl2br',          # 换行转<br>
            'sane_lists'      # 合理的列表处理
        ]
