/**
 * 图片处理工具函数
 * 用于处理图片URL、防盗链等问题
 */

/**
 * 获取图片代理URL（如果需要后端代理，可以在这里实现）
 * @param {string} imageUrl - 图片URL
 * @returns {string} 处理后的图片URL
 */
export function getImageProxyUrl(imageUrl) {
    if (!imageUrl) return ''

    // 如果是相对路径或本地路径，直接返回
    if (!imageUrl.startsWith('http://') && !imageUrl.startsWith('https://') && !imageUrl.startsWith('//')) {
        return imageUrl
    }

    // 如果需要通过后端代理访问第三方图片，可以取消下面的注释
    // 注意：需要后端提供图片代理接口
    // const encodedUrl = encodeURIComponent(imageUrl)
    // return `${import.meta.env.VITE_APP_BASE_API}/common/image/proxy?url=${encodedUrl}`

    // 暂时直接返回原URL，通过添加跨域属性来处理
    return imageUrl
}

/**
 * 转义HTML特殊字符
 * @param {string} text - 需要转义的文本
 * @returns {string} 转义后的文本
 */
function escapeHtml(text) {
    if (!text) return ''
    const map = {
        '&': '&amp;',
        '<': '&lt;',
        '>': '&gt;',
        '"': '&quot;',
        "'": '&#039;'
    }
    return text.replace(/[&<>"']/g, m => map[m])
}

/**
 * 检查内容是否包含有效的HTML标签
 * @param {string} content - 需要检查的内容
 * @returns {boolean} 是否包含HTML标签
 */
function containsHtmlTags(content) {
    // 检查是否包含完整的HTML标签（必须有开始和结束，或者自闭合标签）
    // 匹配常见的HTML标签模式：<tag>、</tag>、<tag/>、<tag attr="value">
    const htmlTagRegex = /<\/?[a-z][a-z0-9]*(\s+[^>]*)?\/?>/i
    return htmlTagRegex.test(content)
}

/**
 * 格式化内容，将图片URL转换为img标签
 * 处理HTML中的图片标签和纯文本中的图片URL
 * @param {string} content - 需要格式化的内容
 * @returns {string} 格式化后的内容
 */
export function formatContentWithImages(content) {
    if (!content) return ''

    // 检查内容是否包含HTML标签
    const isHtmlContent = containsHtmlTags(content)

    // 如果内容已经是HTML格式（包含img标签），需要处理其中的图片URL
    if (content.includes('<img') || content.includes('<IMG')) {
        // 提取所有img标签中的src属性
        const imgSrcRegex = /<img[^>]+src=["']([^"']+)["'][^>]*>/gi
        let formattedContent = content

        formattedContent = formattedContent.replace(imgSrcRegex, (match, src) => {
            // 如果是第三方图片URL，转换为代理URL
            let imageUrl = src
            if (src.startsWith('http://') || src.startsWith('https://') || src.startsWith('//')) {
                // 对于第三方图片，尝试使用代理
                // 如果代理不可用，则使用原URL并添加跨域属性
                imageUrl = getImageProxyUrl(src)
                // 如果代理URL和原URL相同（代理不可用），添加跨域属性
                if (imageUrl === src) {
                    return match.replace(src, src).replace('<img', '<img crossorigin="anonymous" referrerpolicy="no-referrer"')
                } else {
                    return match.replace(src, imageUrl)
                }
            }
            return match
        })

        return formattedContent
    }

    // 匹配图片URL的正则表达式
    // 支持：https://、http://、//开头的完整URL，以及相对路径
    const imageUrlRegex = /(https?:\/\/[^\s<>"']+\.(jpg|jpeg|png|gif|bmp|webp|svg)(\?[^\s<>"']*)?)|(\/\/[^\s<>"']+\.(jpg|jpeg|png|gif|bmp|webp|svg)(\?[^\s<>"']*)?)|(\/[^\s<>"']+\.(jpg|jpeg|png|gif|bmp|webp|svg)(\?[^\s<>"']*)?)/gi

    // 将纯文本的图片URL转换为img标签
    let formattedContent = content
    const urlPositions = []

    // 使用exec方法获取所有图片URL的位置信息
    let match
    const regex = new RegExp(imageUrlRegex)
    while ((match = regex.exec(content)) !== null) {
        urlPositions.push({
            url: match[0],
            startIndex: match.index,
            endIndex: match.index + match[0].length
        })
    }

    // 如果是纯文本内容（不包含HTML标签），需要转义HTML特殊字符
    if (!isHtmlContent) {
        // 从前往后处理，分段转义
        let result = ''
        let lastIndex = 0

        // 处理每个图片URL
        urlPositions.forEach(({ url, startIndex, endIndex }) => {
            // 转义URL之前的内容
            result += escapeHtml(content.substring(lastIndex, startIndex))
            
            // 处理图片URL
            let imageUrl = url.trim()
            if (imageUrl.startsWith('//')) {
                imageUrl = 'https:' + imageUrl
            }

            const proxyUrl = getImageProxyUrl(imageUrl)
            const finalUrl = proxyUrl !== imageUrl ? proxyUrl : imageUrl
            const crossOriginAttr = proxyUrl === imageUrl ? 'crossorigin="anonymous" referrerpolicy="no-referrer"' : ''

            const imgTag = `<img src="${finalUrl}" ${crossOriginAttr} alt="图片" style="max-width: 100%; height: auto; display: block; margin: 10px 0;" onerror="this.onerror=null; this.src='${imageUrl}'; this.style.border='1px solid #ddd'; this.alt='图片加载失败，点击查看原图'; this.style.cursor='pointer'; this.title='点击查看原图'; this.onclick='window.open(this.src)';" />`
            result += imgTag
            
            lastIndex = endIndex
        })
        
        // 转义剩余内容
        result += escapeHtml(content.substring(lastIndex))
        
        return result
    } else {
        // HTML内容，直接替换图片URL
        urlPositions.forEach(({ url }) => {
            let imageUrl = url.trim()
            if (imageUrl.startsWith('//')) {
                imageUrl = 'https:' + imageUrl
            }

            const proxyUrl = getImageProxyUrl(imageUrl)
            const finalUrl = proxyUrl !== imageUrl ? proxyUrl : imageUrl
            const crossOriginAttr = proxyUrl === imageUrl ? 'crossorigin="anonymous" referrerpolicy="no-referrer"' : ''

            const imgTag = `<img src="${finalUrl}" ${crossOriginAttr} alt="图片" style="max-width: 100%; height: auto; display: block; margin: 10px 0;" onerror="this.onerror=null; this.src='${imageUrl}'; this.style.border='1px solid #ddd'; this.alt='图片加载失败，点击查看原图'; this.style.cursor='pointer'; this.title='点击查看原图'; this.onclick='window.open(this.src)';" />`
            formattedContent = formattedContent.replace(url, imgTag)
        })
        
        return formattedContent
    }
}

