/**
 * JSON格式化工具函数
 */

/**
 * 验证JSON字符串是否有效
 * @param jsonString JSON字符串
 * @returns 验证结果和错误信息
 */
export const validateJSON = (jsonString: string): { isValid: boolean; error?: string } => {
    if (!jsonString || jsonString.trim() === '') {
        return { isValid: true }; // 空字符串视为有效
    }

    try {
        JSON.parse(jsonString);
        return { isValid: true };
    } catch (error) {
        return {
            isValid: false,
            error: error instanceof Error ? error.message : 'Invalid JSON format',
        };
    }
};

/**
 * 格式化JSON字符串
 * @param jsonString JSON字符串
 * @param indent 缩进空格数，默认为2
 * @returns 格式化后的JSON字符串
 */
export const formatJSON = (jsonString: string, indent: number = 2): string => {
    if (!jsonString || jsonString.trim() === '') {
        return '';
    }

    try {
        const parsed = JSON.parse(jsonString);
        return JSON.stringify(parsed, null, indent);
    } catch (error) {
        throw new Error(
            `JSON格式化失败: ${error instanceof Error ? error.message : 'Unknown error'}`
        );
    }
};

/**
 * 压缩JSON字符串（移除所有空格和换行）
 * @param jsonString JSON字符串
 * @returns 压缩后的JSON字符串
 */
export const minifyJSON = (jsonString: string): string => {
    if (!jsonString || jsonString.trim() === '') {
        return '';
    }

    try {
        const parsed = JSON.parse(jsonString);
        return JSON.stringify(parsed);
    } catch (error) {
        throw new Error(
            `JSON压缩失败: ${error instanceof Error ? error.message : 'Unknown error'}`
        );
    }
};

/**
 * 获取JSON字符串的语法高亮显示
 * @param jsonString JSON字符串
 * @returns 带有语法高亮的HTML字符串
 */
export const getJSONHighlight = (jsonString: string): string => {
    if (!jsonString || jsonString.trim() === '') {
        return '';
    }

    try {
        const parsed = JSON.parse(jsonString);
        const formatted = JSON.stringify(parsed, null, 2);

        // 简单的语法高亮
        return formatted
            .replace(/(".*?")\s*:/g, '<span style="color: #0369a1;">$1</span>:')
            .replace(/:\s*(".*?")/g, ': <span style="color: #059669;">$1</span>')
            .replace(/:\s*(\d+)/g, ': <span style="color: #dc2626;">$1</span>')
            .replace(/:\s*(true|false|null)/g, ': <span style="color: #7c3aed;">$1</span>')
            .replace(/\n/g, '<br>')
            .replace(/ /g, '&nbsp;');
    } catch {
        return jsonString;
    }
};
