using UnityEngine;

namespace mgaia.Utils
{
    /// <summary>
    /// Representa um grupo de elementos que deve receber cada um uma posição específica
    /// </summary>
    /// <owner>Victor</owner>
    public class PositionSetterGroup : MonoBehaviour
    {
        [SerializeField]
        private ObjectAndPosition[] _objectAndPositions;

        /// <summary>
        /// Todos os objetos e suas respectivas posições que devem ser aplicadas
        /// </summary>
        public ObjectAndPosition[] ObjectAndPositions
        {
            get { return _objectAndPositions; }
        }

        /// <summary>
        /// Retorna o transform de referência para cálculo das posições
        /// </summary>
        public Transform ReferenceTransform
        {
            get
            {
                Transform parentTransform = transform.parent;
                if (parentTransform.parent != null)
                {
                    parentTransform = parentTransform.parent;
                }

                return parentTransform;
            }
        }

        /// <summary>
        /// Seta a posição de todos os objetos
        /// </summary>
        public void SetObjectPositions()
        {
            if (ObjectAndPositions != null)
            {
                foreach (ObjectAndPosition objectAndPosition in ObjectAndPositions)
                {
                    Assert.AssertTrue(objectAndPosition.GameObject != null, "O objeto em uma das posições não foi setado!");

                    objectAndPosition.GameObject.transform.position = ReferenceTransform.TransformPoint(objectAndPosition.Position);
                }
            }
        }
    }
}