using System;
using System.Collections;
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.EventSystems;
using TMPro;
using CommanderAILab.Models;
using CommanderAILab.Services;
namespace CommanderAILab.Animation
{
///
/// CardController — manages a single card prefab instance.
/// Handles: card data binding, image loading (async Scryfall),
/// flip animation, hover scale + glow, click raise + detail panel,
/// tooltip overlay, drag support, mobile gestures.
/// Attach to a UI Image-based card prefab.
///
public class CardController : MonoBehaviour,
IPointerEnterHandler, IPointerExitHandler, IPointerClickHandler,
IBeginDragHandler, IDragHandler, IEndDragHandler
{
[Header("Card Faces")]
[SerializeField] private Image frontFaceImage;
[SerializeField] private Image backFaceImage;
[Header("Glow / Outline")]
[SerializeField] private Outline glowOutline;
[SerializeField] private Color glowColor = new Color(1f, 0.85f, 0f, 0.9f);
[Header("Tooltip")]
[SerializeField] private GameObject tooltipPanel;
[SerializeField] private TMP_Text tooltipName;
[SerializeField] private TMP_Text tooltipManaCost;
[SerializeField] private TMP_Text tooltipTypeLine;
[Header("Animation Settings")]
[SerializeField] private float hoverScaleMultiplier = 1.12f;
[SerializeField] private float hoverRaiseY = 15f;
[SerializeField] private float flipDuration = 0.35f;
[SerializeField] private float hoverDuration = 0.15f;
[SerializeField] private float clickRaiseY = 40f;
[Header("LOD")]
[SerializeField] private Sprite lowResPlaceholder;
// Public events for parent scenes
public event Action OnCardClicked;
public event Action OnDragStarted;
public event Action OnDragMoved;
public event Action OnDragEnded;
private CardModel _card;
private Vector3 _originalScale;
private Vector3 _originalPosition;
private RectTransform _rectTransform;
private bool _isFaceUp = true;
private bool _isFlipping = false;
private bool _isHovered = false;
private bool _isDragging = false;
private Vector2 _dragOffset;
private Canvas _parentCanvas;
// Mobile gesture tracking
private float _pointerDownTime;
private bool _pointerHeld;
private const float LongPressThreshold = 0.4f;
private void Awake()
{
_rectTransform = GetComponent();
_originalScale = transform.localScale;
_originalPosition = transform.localPosition;
_parentCanvas = GetComponentInParent