using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using SGModule.Common.Helper;

public class WebSocketTools {
    // 反序列化函数，返回 ResponseData 对象
    public static ResponseData DeserializeResponse(string jsonMessage) {
        try {
            return JsonConvert.DeserializeObject<ResponseData>(jsonMessage);
        }
        catch (JsonException ex) {
            Log.Net.Error($"Failed to deserialize response: {ex.Message}");
            return null;
        }
    }

    // 处理数据函数
    public static void ProcessResponseData(ResponseData responseData) {
        // 处理请求成功的情况
        if (responseData.Body.Code == 0) {
            Log.Net.Info("Request succeeded");
            HandleData(responseData.Body.Data); // 不传入类型时，先默认不解析
        }
        else {
            Log.Net.Error($"Request failed: {responseData.Body.Msg}");
        }
    }

    // 泛型版本的 HandleData，允许外部传入一个类型
    public static void HandleData(JToken data) {
        // 检查 data 是否为空对象
        if (data.Type == JTokenType.Object && !data.HasValues) {
            Log.Net.Info("Data is empty");
            // 可根据需要进一步处理空数据的情况
        }
        else {
            // 如果 data 包含有效数据，打印或进一步处理
            Log.Net.Info("Received data: " + data);
            ProcessValidData(data);
        }
    }

    // 泛型版本的 HandleData，传入类型进行解析
    public static void HandleData<T>(JToken data) {
        if (data != null) {
            try {
                var parsedData = data.ToObject<T>(); // 将 data 解析为指定类型
                Log.Net.Info("Parsed data: " + JsonConvert.SerializeObject(parsedData));
                ProcessValidData(parsedData); // 进一步处理解析后的数据
            }
            catch (JsonException ex) {
                Log.Net.Error($"Failed to parse data to type {typeof(T)}: {ex.Message}");
            }
        }
        else {
            Log.Net.Warning("Data is null, cannot parse.");
        }
    }

    // 处理解析后的 data 类型
    public static void ProcessValidData<T>(T parsedData) {
        if (parsedData != null) {
            // 在这里可以对解析后的 data 进行具体处理
            Log.Net.Info("Successfully processed data: " + parsedData);
        }
        else {
            Log.Net.Warning("Parsed data is null, cannot process.");
        }
    }
}
