using System;
using System.Collections;
using ShiroginSDK.Runtime.Modules.Events;
using ShiroginSDK.Runtime.Services.Base;
using ShiroginSDK.Runtime.Services.Interfaces;
using UnityEngine;
using UnityEngine.UI;
namespace ShiroginSDK.Samples.AnalyticsSample.Scripts
{
///
/// Sample UI that manually fires ShiroginEvents for analytics testing.
/// Each button simulates a real analytics event for validation and debugging.
///
[RequireComponent(typeof(Canvas))]
public class AnalyticsEventSampleUI : MonoBehaviour
{
[Header("UI References")] [Tooltip("Parent RectTransform where all buttons will be created.")] [SerializeField]
private RectTransform buttonContainer;
[Header("Button Settings")] [SerializeField]
private Font buttonFont;
[SerializeField]
private Color buttonColor = new(0.2f, 0.4f, 0.8f);
[SerializeField]
private Color textColor = Color.white;
[SerializeField]
private Vector2 buttonSize = new(250, 80);
[SerializeField]
private int columns = 3;
[SerializeField]
private int spacing = 15;
private IEventService _eventService;
private void Awake()
{
_eventService = ServiceLocator.Get();
}
private void Start()
{
if (buttonContainer == null)
{
Debug.LogError("[AnalyticsEventSampleUI] Missing ButtonContainer RectTransform.");
return;
}
SetupGrid();
StartCoroutine(CreateButtonsGradually());
}
private void SetupGrid()
{
var grid = buttonContainer.GetComponent()
?? buttonContainer.gameObject.AddComponent();
grid.cellSize = buttonSize;
grid.spacing = new Vector2(spacing, spacing);
grid.constraint = GridLayoutGroup.Constraint.FixedColumnCount;
grid.constraintCount = columns;
grid.childAlignment = TextAnchor.UpperCenter;
Canvas.ForceUpdateCanvases();
}
private IEnumerator CreateButtonsGradually()
{
CreateButton("Purchase Success", OnPurchaseSuccess);
yield return null;
CreateButton("Purchase Fail", OnPurchaseFail);
yield return null;
CreateButton("Reward Claimed", OnRewardClaimed);
yield return null;
CreateButton("Ad Watched", OnAdWatched);
yield return null;
CreateButton("Ad Revenue", OnAdRevenue);
yield return null;
CreateButton("Player SignUp", OnPlayerSignUp);
yield return null;
CreateButton("Player Login", OnPlayerLogin);
yield return null;
CreateButton("Session Start", OnSessionStart);
yield return null;
CreateButton("Session End", OnSessionEnd);
yield return null;
CreateButton("Tutorial Start", OnTutorialStart);
yield return null;
CreateButton("Tutorial Complete", OnTutorialComplete);
yield return null;
CreateButton("Level Complete", OnLevelComplete);
yield return null;
}
private void CreateButton(string label, Action callback)
{
var go = new GameObject(label, typeof(RectTransform), typeof(Button), typeof(Image));
go.transform.SetParent(buttonContainer, false);
var img = go.GetComponent();
img.color = buttonColor;
var btn = go.GetComponent