using UnityEngine;

public class GroundInteractableItem : MonoBehaviour
{
    [SerializeField] private Animator _interactableController;
    [SerializeField] private CircleCollider2D _itemCollider2d;
    [SerializeField] private Item _itemToPickup;

    private SpriteRenderer _itemSpriteRenderer;
    private bool _closeEnoughToInteract;
    private bool _moveItem = false;
    private Vector3 _positionToMoveTo;
    private float _movementSpeed = 100f;

    private PlayerController _closePlayer;

    // Start is called before the first frame update
    void Start()
    {
        _itemSpriteRenderer = this.gameObject.GetComponent<SpriteRenderer>();

        if(_itemToPickup != null)
        {
            _itemSpriteRenderer.sprite = _itemToPickup.itemLoRezSprite;
        }
    }

    public void CreateNewGroundInteractable(Item itemToPickup)
    {
        Item clone = Instantiate(itemToPickup);
        clone.amountStacked = 1;
        _itemToPickup = clone;
        _closeEnoughToInteract = false;
        _itemCollider2d = this.gameObject.GetComponent<CircleCollider2D>();
        _itemSpriteRenderer = this.gameObject.GetComponent<SpriteRenderer>();
    }

    public void TriggerChestDropAnimation()
    {
        _interactableController.SetTrigger("ChestDrop");
    }

    public void PickupItem()
    {
        bool finished = false;
        if (_closeEnoughToInteract)
        {
            finished = _closePlayer.PickupGroundItem(_itemToPickup);
        }

        if (finished)
        {
            Destroy(this.gameObject);
        }
        else
        {
            Debug.Log("Couldn't Pick up item");
        }
    }

    public void MoveItemToLocation(Vector3 position)
    {
        _positionToMoveTo = position;
        _moveItem = true;
        TriggerChestDropAnimation();
    }

    private void OnTriggerEnter2D(Collider2D collision)
    {
        if(collision.gameObject.layer == 3)
        {
            _closeEnoughToInteract = true;
            _closePlayer = collision.gameObject.GetComponent<PlayerController>();
            PickupItem();
        }
    }

    private void OnTriggerExit2D(Collider2D collision)
    {
        if(collision.gameObject.layer == 3)
        {
            if(collision.gameObject.GetComponent<PlayerController>() == _closePlayer)
            {
                _closeEnoughToInteract = false;
                _closePlayer = null;
            }
        }
    }

    // Update is called once per frame
    void Update()
    {
        if(_moveItem == true)
        {
            transform.position = Vector3.MoveTowards(transform.position, _positionToMoveTo, _movementSpeed * Time.deltaTime);

            if(transform.position == _positionToMoveTo)
            {
                _moveItem = false;
                _interactableController.SetTrigger("Idle");
            }
        }
    }
}