using System;
using UnityEditor;
using UnityEngine;
using UnityEngine.Analytics;
namespace Unity.VisualScripting.Analytics
{
internal static class OnPreprocessBuildAnalytics
{
private const int MaxEventsPerHour = 120;
private const int MaxNumberOfElements = 1000;
private const string VendorKey = "unity.visualscripting";
private const string EventName = "VScriptOnPreprocessBuild";
#if !UNITY_2023_2_OR_NEWER
private static bool _isRegistered = false;
#endif
#if UNITY_2023_2_OR_NEWER
internal static void Send(Data data)
{
if (!EditorAnalytics.enabled)
return;
EditorAnalytics.SendAnalytic(new OnPreprocessBuildAnalytic(data));
}
#else
internal static void Send(Data data)
{
if (!EditorAnalytics.enabled)
return;
if (!RegisterEvent())
return;
EditorAnalytics.SendEventWithLimit(EventName, data);
}
private static bool RegisterEvent()
{
if (!_isRegistered)
{
var result = EditorAnalytics.RegisterEventWithLimit(EventName, MaxEventsPerHour, MaxNumberOfElements, VendorKey);
if (result == UnityEngine.Analytics.AnalyticsResult.Ok)
{
_isRegistered = true;
}
}
return _isRegistered;
}
#endif
#if UNITY_2023_2_OR_NEWER
[AnalyticInfo(eventName: EventName, vendorKey: VendorKey, maxEventsPerHour:MaxEventsPerHour, maxNumberOfElements:MaxNumberOfElements)]
class OnPreprocessBuildAnalytic : IAnalytic
{
private Data data;
public OnPreprocessBuildAnalytic(Data data)
{
this.data = data;
}
public bool TryGatherData(out IAnalytic.IData data, out Exception error)
{
error = null;
data = this.data;
return data != null;
}
}
[Serializable]
internal struct Data : IAnalytic.IData
#else
[Serializable]
internal struct Data
#endif
{
[SerializeField]
internal string guid;
[SerializeField]
internal BuildTarget buildTarget;
[SerializeField]
internal BuildTargetGroup buildTargetGroup;
}
}
}