using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using NaughtyAttributes;


/// <summary>
/// Utility script to fake parent an object to another
/// </summary>
public class CopyTransform : MonoBehaviour
{

    #region Inspector Fields
    [SerializeField, BoxGroup("References")]
    public Transform m_target;

    [SerializeField, Range(0, 1)]
    public float m_dampening = 1;
    #endregion Inspector Fields

    #region Private Fields

    private Vector3 m_positionOffset;
    private Quaternion m_rotationOffset;


    #endregion Private Fields

    #region Getters

    #endregion Getters



    #region MonoBehaviour Functions

    private void Awake()
    {
        m_positionOffset = transform.position - m_target.position;
        m_rotationOffset = m_target.rotation * Quaternion.Inverse(transform.rotation);
    }

    /// <summary>
	/// OnEnable is called when the object becomes enabled and active.
    /// </summary>
    private void OnEnable()
    {
    
    }

    /// <summary>
	/// OnDisable is called when the behaviour becomes disabled.
    /// </summary>
    private void OnDisable()
    {
    
    }

    /// <summary>
    /// Update is called once per frame
    /// </summary>
    private void FixedUpdate()
    {
        Vector3 expectedPosition =  m_target.position +  (m_target.rotation * m_positionOffset);
        Quaternion expectedRotation = m_target.rotation * m_rotationOffset;

        transform.position = Vector3.Lerp(transform.position, expectedPosition, m_dampening);
        transform.rotation = Quaternion.Lerp(transform.rotation, expectedRotation, m_dampening);
    }

    #endregion MonoBehaviour Functions

    #region Class Functionality
    
    #endregion Class Functionality

    #region Editor Functions
    /// <summary>
    /// Called when the Component is created or Reset from the Inspector
    /// </summary>
    private void Reset()
    {
        //useful for finding components on creation
    } 
    #endregion Editor Functions

}