#!/usr/bin/env python
# @Project ：django_base_ai
# @File    : ueditor_settings.py
# @Author  : cx
# @Time    : 11/2/2025
# @Desc    : UEditor 富文本工具栏与上传配置，供前端与 file_list 等使用。

import logging

from django.conf import settings as g_settings  # 全局设置

logger = logging.getLogger(__name__)

# 工具栏样式，可以添加任意多的模式
toolbars_settings = {
    "besttome": [
        [
            "source",
            "undo",
            "redo",
            "bold",
            "italic",
            "underline",
            "forecolor",
            "backcolor",
            "superscript",
            "subscript",
            "justifyleft",
            "justifycenter",
            "justifyright",
            "insertorderedlist",
            "insertunorderedlist",
            "blockquote",
            "formatmatch",
            "removeformat",
            "autotypeset",
            "inserttable",
            "pasteplain",
            "wordimage",
            "searchreplace",
            "map",
            "preview",
            "fullscreen",
        ],
        [
            "insertcode",
            "paragraph",
            "fontfamily",
            "fontsize",
            "link",
            "unlink",
            "insertimage",
            "insertvideo",
            "attachment",
            "emotion",
            "date",
            "time",
        ],
    ],
    "mini": [
        [
            "source",
            "|",
            "undo",
            "redo",
            "|",
            "bold",
            "italic",
            "underline",
            "formatmatch",
            "autotypeset",
            "|",
            "forecolor",
            "backcolor",
            "|",
            "link",
            "unlink",
            "|",
            "simpleupload",
            "attachment",
        ]
    ],
    "normal": [
        [
            "source",
            "|",
            "undo",
            "redo",
            "|",
            "bold",
            "italic",
            "underline",
            "removeformat",
            "formatmatch",
            "autotypeset",
            "|",
            "forecolor",
            "backcolor",
            "|",
            "link",
            "unlink",
            "|",
            "simpleupload",
            "emotion",
            "attachment",
            "|",
            "inserttable",
            "deletetable",
            "insertparagraphbeforetable",
            "insertrow",
            "deleterow",
            "insertcol",
            "deletecol",
            "mergecells",
            "mergeright",
            "mergedown",
            "splittocells",
            "splittorows",
            "splittocols",
        ]
    ],
}

# 默认的Ueditor设置，请参见ueditor.config.js
ueditor_settings = {
    "toolbars": toolbars_settings["normal"],
    "autoFloatEnabled": False,
    "defaultPathFormat": "%(basename)s_%(datetime)s_%(rnd)s.%(extname)s",  # 默认保存上传文件的命名方式
}
# 请参阅php文件夹里面的config.json进行配置
ueditor_upload_settings = {
    # 上传图片配置项
    "imageActionName": "uploadimage",  # 执行上传图片的action名称
    "imageMaxSize": 10485760,  # 上传大小限制，单位B,10M
    "imageFieldName": "upfile",  # * 提交的图片表单名称 */
    "imagePathFormat": "",
    "imageInsertAlign": "none",
    "imageAllowFiles": [".png", ".jpg", ".jpeg", ".gif", ".bmp"],  # 上传图片格式显示
    # 涂鸦图片上传配置项 */
    "scrawlActionName": "uploadscrawl",  # 执行上传涂鸦的action名称 */
    "scrawlFieldName": "upfile",  # 提交的图片表单名称 */
    "scrawlMaxSize": 10485760,  # 上传大小限制，单位B  10M
    "scrawlPathFormat": "",
    "scrawlInsertAlign": "none",
    # 截图工具上传 */
    "snapscreenActionName": "uploadimage",  # 执行上传截图的action名称 */
    "snapscreenPathFormat": "",
    "snapscreenInsertAlign": "none",  # /* 插入的图片浮动方式 */
    # 抓取远程图片配置 */
    "catcherLocalDomain": ["127.0.0.1", "localhost", "img.baidu.com"],
    "catcherPathFormat": "",
    "catcherActionName": "catchimage",  # 执行抓取远程图片的action名称 */
    "catcherFieldName": "source",  # 提交的图片列表表单名称 */
    "catcherMaxSize": 10485760,  # 上传大小限制，单位B */
    "catcherAllowFiles": [".png", ".jpg", ".jpeg", ".gif", ".bmp"],  # 抓取图片格式显示 */
    "catcherInsertAlign": "none",  # /* 插入的图片浮动方式 */
    # 上传视频配置 */
    "videoActionName": "uploadvideo",  # 执行上传视频的action名称 */
    "videoPathFormat": "",
    "videoFieldName": "upfile",  # 提交的视频表单名称 */
    "videoMaxSize": 102400000,  # 上传大小限制，单位B，默认100MB */
    "videoAllowFiles": [
        ".flv",
        ".swf",
        ".mkv",
        ".avi",
        ".rm",
        ".rmvb",
        ".mpeg",
        ".mpg",
        ".ogg",
        ".ogv",
        ".mov",
        ".wmv",
        ".mp4",
        ".webm",
        ".mp3",
        ".wav",
        ".mid",
    ],  # 上传视频格式显示 */
    # 上传文件配置 */
    "fileActionName": "uploadfile",  # controller里,执行上传视频的action名称 */
    "filePathFormat": "",
    "fileFieldName": "upfile",  # 提交的文件表单名称 */
    "fileMaxSize": 204800000,  # 上传大小限制，单位B，200MB */
    "fileAllowFiles": [
        ".png",
        ".jpg",
        ".jpeg",
        ".gif",
        ".bmp",
        ".flv",
        ".swf",
        ".mkv",
        ".avi",
        ".rm",
        ".rmvb",
        ".mpeg",
        ".mpg",
        ".ogg",
        ".ogv",
        ".mov",
        ".wmv",
        ".mp4",
        ".webm",
        ".mp3",
        ".wav",
        ".mid",
        ".rar",
        ".zip",
        ".tar",
        ".gz",
        ".7z",
        ".bz2",
        ".cab",
        ".iso",
        ".doc",
        ".docx",
        ".xls",
        ".xlsx",
        ".ppt",
        ".pptx",
        ".pdf",
        ".txt",
        ".md",
        ".xml",
    ],  # 上传文件格式显示 */
    # 列出指定目录下的图片 */
    "imageManagerActionName": "listimage",  # 执行图片管理的action名称 */
    "imageManagerListPath": "",
    "imageManagerListSize": 30,  # 每次列出文件数量 */
    "imageManagerAllowFiles": [".png", ".jpg", ".jpeg", ".gif", ".bmp"],  # 列出的文件类型 */
    # 列出指定目录下的文件 */
    "fileManagerActionName": "listfile",  # 执行文件管理的action名称 */
    "fileManagerListPath": "",
    "fileManagerListSize": 30,  # 每次列出文件数量 */
    "fileManagerAllowFiles": [
        ".png",
        ".jpg",
        ".jpeg",
        ".gif",
        ".bmp",
        ".tif",
        ".psd.flv",
        ".swf",
        ".mkv",
        ".avi",
        ".rm",
        ".rmvb",
        ".mpeg",
        ".mpg",
        ".ogg",
        ".ogv",
        ".mov",
        ".wmv",
        ".mp4",
        ".webm",
        ".mp3",
        ".wav",
        ".mid",
        ".rar",
        ".zip",
        ".tar",
        ".gz",
        ".7z",
        ".bz2",
        ".cab",
        ".iso",
        ".doc",
        ".docx",
        ".xls",
        ".xlsx",
        ".ppt",
        ".pptx",
        ".pdf",
        ".txt",
        ".md",
        ".xml",
        ".exe",
        ".com",
        ".dll",
        ".msi",
    ],  # 列出的文件类型 */
}


# 更新配置：从用户配置文件settings.py重新读入配置UEDITOR_SETTINGS,覆盖默认
def update_user_settings():
    user_settings = getattr(g_settings, "UEDITOR_SETTINGS", {}).copy()
    if "config" in user_settings:
        ueditor_settings.update(user_settings["config"])
    if "upload" in user_settings:
        ueditor_upload_settings.update(user_settings["upload"])


# 读取用户Settings文件并覆盖默认配置
update_user_settings()


# 取得配置项参数
def get_ueditor_settings(key, default=None):
    return ueditor_settings.get(key, default)
