using System.Collections;
using System.Collections.Generic;
using DG.Tweening;
using ShiroginSDK.Runtime.Core.SDK;
using ShiroginSDK.Runtime.Core.Utils;
using ShiroginSDK.Runtime.Modules.Events;
using ShiroginSDK.Runtime.Modules.UI.Popup.Enums;
using ShiroginSDK.Runtime.Modules.UI.Popup.Scripts.SO;
using ShiroginSDK.Runtime.Modules.UI.Popup.Scripts.UI.Base;
using ShiroginSDK.Runtime.Services.Base;
using ShiroginSDK.Runtime.Services.Interfaces;
using ShiroginSDK.Runtime.Shared.Constants;
using UnityEngine;
using UnityEngine.UI;
namespace ShiroginSDK.Runtime.Services.Implementations.UI
{
///
/// Manages all queued popups with background dimming and smooth animations.
/// Integrated with EventService to automatically respond to common SDK events.
///
public class PopupService : ServiceBase, IPopupService
{
private readonly Queue<(PopupType, object)> _popupQueue = new();
private CanvasGroup _dimBackground;
private bool _isShowing;
private PopupRepository _repository;
private Canvas _rootCanvas;
// ----------------------------------------------------
// Initialization
// ----------------------------------------------------
public void Initialize(Canvas canvas, PopupRepository repository)
{
_rootCanvas = canvas;
_repository = repository;
InitializeDim();
}
// ----------------------------------------------------
// Public API
// ----------------------------------------------------
public void Show(PopupType type, object data = null)
{
Enqueue(type, data);
}
public void SetRepository(PopupRepository repo)
{
_repository = repo;
}
public void SetCanvas(Canvas canvas)
{
_rootCanvas = canvas;
}
// ----------------------------------------------------
// Lifecycle
// ----------------------------------------------------
protected override void OnInitialize()
{
// Load repository from SDKConfig
var config = ShiroginConfig.Load();
if (config == null)
{
Debug.LogError("[PopupService] ❌ SDKConfig not found! Cannot load PopupRepository.");
return;
}
_repository = config.popupRepository;
if (_repository == null) Debug.LogWarning("[PopupService] ⚠️ PopupRepository is null in SDKConfig.");
// Try to find root canvas automatically if none assigned
if (_rootCanvas == null)
_rootCanvas = Object.FindFirstObjectByType