package com.ho.business.util;

import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;

public class JsonArrayEquality {
    public static boolean areEqual(JSONArray a, JSONArray b) {
        if (a == null || b == null) {
            return a == b; // 如果两个数组都是null，则它们是相等的
        }

        if (a.size() != b.size()) {
            return false; // 如果长度不等，则不相等
        }

        for (int i = 0; i < a.size(); i++) {
            if (!areEqual(a.get(i), b.get(i))) {
                return false; // 如果有任何一个对应位置的元素不相等，则不相等
            }
        }

        return true; // 所有对应位置的元素都相等，则两个数组相等
    }

    // 递归比较元素，考虑基本类型和JSONArray、JSONObject的嵌套
    private static boolean areEqual(Object a, Object b) {
        if (a == null || b == null) {
            return a == b; // 如果两个元素都是null，则它们是相等的
        }

        if (a instanceof JSONArray && b instanceof JSONArray) {
            return areEqual((JSONArray) a, (JSONArray) b);
        } else if (a instanceof JSONArray || b instanceof JSONArray) {
            return false; // 一个是JSONArray而另一个不是
        }

        if (a instanceof JSONObject && b instanceof JSONObject) {
            // 需要额外的代码来比较JSONObject
            throw new UnsupportedOperationException("Comparing JSONObjects is not supported yet.");
        } else if (a instanceof JSONObject || b instanceof JSONObject) {
            return false; // 一个是JSONObject而另一个不是
        }

        return a.equals(b); // 对于基本类型和简单的JSON类型（如String, Integer, Boolean等），直接比较
    }
}
