using DG.Tweening;
using System.Collections.Generic;
using UnityEngine;
using UVC.Data;
using UVC.Factory.Component;
namespace UVC.Factory.Alarm
{
///
/// 특정 설비(FactoryObject)에 연결된 알람 아이콘 UI를 관리하는 클래스입니다.
/// 알람이 하나일 때는 단일 아이콘, 여러 개일 때는 클러스터(묶음) 아이콘을 표시합니다.
/// 클러스터 아이콘을 클릭하면 개별 알람 아이콘들을 원형으로 펼쳐 보여주는 기능을 담당합니다.
///
public class AlarmIconManager : MonoBehaviour
{
[Header("UI Components")]
[Tooltip("알람이 여러 개일 때 표시될 묶음 아이콘 UI입니다.")]
[SerializeField] private AlarmClusterIcon clusterView;
[Tooltip("알람 아이콘들이 펼쳐질 때 부모가 될 UI 영역입니다.")]
[SerializeField] private GameObject expandedView;
[Tooltip("개별 알람을 표시할 아이콘의 프리팹입니다.")]
[SerializeField] private GameObject alarmSingleIconManagerPrefab; // 개별 알람 아이콘
[Header("UI Layout Settings")]
[Tooltip("3D 설비 객체와 UI 아이콘 사이의 수직(Y) 간격입니다.")]
[SerializeField] private float objectYOffset = 0f;
[Tooltip("아이콘을 펼쳤을 때 개별 아이콘 사이의 간격입니다.")]
[SerializeField] private float iconSpacing = 20f;
[Tooltip("아이콘을 펼쳤을 때의 중심점 X축 오프셋입니다.")]
[SerializeField] private float expandOffsetX = 0f;
[Tooltip("아이콘을 펼쳤을 때의 중심점 Y축 오프셋입니다.")]
[SerializeField] private float expandOffsetY = 0f;
// 이 UI가 따라다닐 3D 설비 객체의 Transform입니다.
private Transform targetObject;
// 이 UI가 관리하는 모든 알람 데이터의 리스트입니다.
private List alarms = new List();
// 현재 클러스터가 펼쳐진 상태인지 여부를 나타내는 플래그입니다.
private bool isExpanded = false;
// 알람이 하나일 때 사용되는 단일 알람 아이콘의 인스턴스입니다.
private AlarmSingleIconManager singleAlarmIcon1 = null;
// UI 위치 계산에 필요한 컴포넌트들입니다.
private RectTransform rectTransform;
private Canvas canvas;
// UI 애니메이션을 위한 DoTween 핸들러입니다.
private Tweener uiSpacingTweener;
// 사용자가 클러스터를 클릭하여 줌인했는지 상태를 추적하는 변수입니다.
private bool isZoomIn = false;
///
/// MonoBehaviour가 활성화될 때 호출되는 Unity 생명주기 메서드입니다.
/// UI 위치 계산에 필요한 RectTransform과 Canvas 컴포넌트를 찾아 저장합니다.
///
private void Awake()
{
rectTransform = GetComponent();
canvas = GetComponentInParent