using UnityEngine;
using TMPro;
using UnityEngine.UI;

public class DestructibleBrick : Brick
{
    public int hitPoints = 1;
    
    // Определяем цвета для разных уровней прочности
    protected static readonly Color[] defaultColors = new Color[] {
        new Color(1.0f, 0.2f, 0.2f),      // Красный (1 жизнь)
        new Color(0.933f, 0.933f, 0.933f), // Почти белый
        new Color(0.867f, 0.867f, 0.867f),
        new Color(0.800f, 0.800f, 0.800f),
        new Color(0.733f, 0.733f, 0.733f),
        new Color(0.667f, 0.667f, 0.667f),
        new Color(0.600f, 0.600f, 0.600f),
        new Color(0.533f, 0.533f, 0.533f),
        new Color(0.467f, 0.467f, 0.467f),
        new Color(0.400f, 0.400f, 0.400f),
        new Color(0.333f, 0.333f, 0.333f),
        new Color(0.267f, 0.267f, 0.267f),
        new Color(0.200f, 0.200f, 0.200f),
        new Color(0.133f, 0.133f, 0.133f),
        new Color(0.067f, 0.067f, 0.067f)  // Почти черный
    };

    protected TextMeshProUGUI hitPointsText;

    protected override void Start()
    {
        base.Start();
        
        // Проверяем наличие шрифта для WebGL
        if (TMP_Settings.defaultFontAsset == null)
        {
            Debug.LogError("Default TMP font asset is missing! Text may not be visible in WebGL build.");
            return;
        }

        // Инициализируем spriteRenderer
        if (spriteRenderer == null)
        {
            spriteRenderer = GetComponent<SpriteRenderer>();
        }

        // Создаем объект для текста, если его еще нет
        if (hitPointsText == null)
        {
            // Создаем канвас для текста
            GameObject canvasObj = new GameObject("BrickCanvas");
            canvasObj.transform.SetParent(transform);
            canvasObj.transform.localPosition = Vector3.zero;
            canvasObj.transform.localRotation = Quaternion.identity;
            canvasObj.transform.localScale = Vector3.one;

            // Добавляем компоненты канваса
            Canvas canvas = canvasObj.AddComponent<Canvas>();
            canvas.renderMode = RenderMode.WorldSpace;
            canvasObj.AddComponent<CanvasScaler>();

            // Настраиваем размер канваса
            RectTransform canvasRect = canvasObj.GetComponent<RectTransform>();
            canvasRect.sizeDelta = new Vector2(1, 1); // Размер блока

            // Создаем объект для текста
            GameObject textObj = new GameObject("HitPointsText");
            textObj.transform.SetParent(canvasObj.transform);
            textObj.transform.localPosition = Vector3.zero;
            textObj.transform.localRotation = Quaternion.identity;
            textObj.transform.localScale = Vector3.one;

            hitPointsText = textObj.AddComponent<TextMeshProUGUI>();
            
            // Настраиваем RectTransform для текста
            RectTransform textRect = textObj.GetComponent<RectTransform>();
            textRect.anchorMin = Vector2.zero;
            textRect.anchorMax = Vector2.one;
            textRect.sizeDelta = Vector2.zero;
            textRect.anchoredPosition = Vector2.zero;
            
            // Базовые настройки текста
            hitPointsText.fontSize = 0.4f;
            hitPointsText.alignment = TextAlignmentOptions.Center;
            hitPointsText.fontStyle = FontStyles.Bold;
            
            // Устанавливаем цвет текста и обводку
            hitPointsText.color = Color.white;
            hitPointsText.outlineWidth = 0.2f;
            hitPointsText.outlineColor = Color.black;
            
            // Важные настройки для видимости
            hitPointsText.enableWordWrapping = false;
            hitPointsText.overflowMode = TextOverflowModes.Overflow;
            
            // Установка шрифта
            hitPointsText.font = TMP_Settings.defaultFontAsset;
        }
        
        // Обновляем визуальное отображение блока
        UpdateVisuals();
    }

    protected override void OnCollisionEffect(Collision2D collision)
    {
        base.OnCollisionEffect(collision);
        UpdateVisuals();
    }

    protected override void TakeHit()
    {
        hitPoints--;
        
        if (hitPoints <= 0)
        {
            // Запускаем эффект уничтожения
            PlayDestroyEffect();
            
            // Сильная вибрация при уничтожении
            if (HapticManager.Instance != null)
            {
                HapticManager.Instance.HeavyTap();
            }
            
            // Add points to score
            GameManager.Instance.AddScore(points);
            
            // Notify GameManager about brick destruction
            GameManager.Instance.BrickDestroyed();
            
            // Check if this was the last brick
            GameManager.Instance.CheckWinCondition();
            
            // Destroy the brick
            Destroy(gameObject);
        }
        else
        {
            // Запускаем эффект удара
            PlayHitEffect();
            
            // Средняя вибрация при ударе
            if (HapticManager.Instance != null)
            {
                HapticManager.Instance.MediumTap();
            }
            
            UpdateVisuals();
        }
    }

    protected virtual void UpdateVisuals()
    {
        // Обновляем текст с количеством жизней
        if (hitPointsText != null)
        {
            hitPointsText.text = hitPoints.ToString();
        }
        
        // Обновляем цвет блока в зависимости от оставшихся жизней
        if (spriteRenderer != null)
        {
            int colorIndex = Mathf.Clamp(hitPoints - 1, 0, defaultColors.Length - 1);
            spriteRenderer.color = defaultColors[colorIndex];
        }
    }
}
