const jwt = require('jsonwebtoken');
const express = require('express');
const router = express.Router();
const path = require('path');


// 根据后缀名判断文档类型
function getDocumentType(ext) {
    if (['doc', 'docx', 'rtf', 'txt'].includes(ext)) return 'word';
    if (['xls', 'xlsx', 'csv'].includes(ext)) return 'cell';
    if (['ppt', 'pptx'].includes(ext)) return 'slide';
    return 'word';
}

// startup
router.get('/api/workflow/office/preview', async function (req, res) {
    const fileUrl = req.query.src; // 外部传入的文件下载直链
    if (!fileUrl) return res.status(400).send("Missing src parameter");

    const fileName = decodeURIComponent(path.basename(new URL(fileUrl).pathname));
    const fileType = fileName.split('.').pop();

    // 构建 ONLYOFFICE 配置对象
    const config = {
        document: {
            fileType: fileType,
            key: Buffer.from(fileUrl).toString('base64').substring(0, 20), // 生成唯一key
            title: fileName,
            url: fileUrl,
            permissions: {
                edit: false,        // 禁止编辑
                download: true,     // 是否允许下载
                print: true,        // 是否允许打印
                fillForms: false    // 禁止表单填写
            }
        },
        documentType: getDocumentType(fileType),
        editorConfig: {
            mode: 'view',           // 强制只读模式
            lang: 'zh-CN',
            canAutosave: false,
            canShare: false,
            customization: {
                about: false,         // 隐藏右键菜单中的“关于”
                comments: false,      // 隐藏评论
                feedback: {
                    visible: false    // 隐藏反馈按钮
                },
                forcesave: false,
                help: false,          // 隐藏帮助按钮
                hideRightMenu: true,  // 隐藏右侧菜单栏
                logo: {
                    image: "",        // 清空 Logo 图片地址
                    imageEmbedded: "", // 清空嵌入式 Logo 地址
                    url: ""           // 点击 Logo 跳转的链接清空
                },
                toolbarNoTabs: true   // 让工具栏更紧凑
            }
        }
    };

    // 使用环境变量中的 Secret 生成 Token
    const token = jwt.sign(config, process.env.B6_ONLYOFFICE_JWT_SECRET);
    config.token = token;

    // 返回配置和 API 地址
    res.json({
        config: config,
        apiUrl: `${process.env.B6_ONLYOFFICE_SERVER_URL}web-apps/apps/api/documents/api.js`
    });
})

exports.default = router;