using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.InputSystem;

public class PlayerHeightEntity : MonoBehaviour
{
    public float entityHeight;
    public Collider2D physicsCollider;
    public GameObject spriteRenderer;
    public GameObject shadowSpriteRenderer;
    public float startingShadowHeight;
    public float spriteHeight;
    public float currentFloorHeight;
    public PlayerJump playerJump;
    public float jumpDuration;
    public float currentSpriteFloorHeight;
    public float defaultFloorHeight;
    public float defaultSpriteFloorHeight;
    public PlatformChecker platformChecker;
    public List<Collider2D> colliders;
    public float spriteToEntityRatio;
    public float gravityScale;
    [SerializeField] private float gravity;


    public void Start()
    {
        startingShadowHeight = shadowSpriteRenderer.transform.localPosition.y;
        spriteHeight = spriteRenderer.transform.localPosition.y;
    }

    public void FloorChecks()
    {
        if(!playerJump.onFloor && !playerJump.isJumping)
        {
            gravity = gravityScale;
        }
        else
        {
            gravity = 0;
        }
        if(!platformChecker.onPlatform)
        {
            shadowSpriteRenderer.transform.localPosition = new Vector3(0, startingShadowHeight
                 + currentSpriteFloorHeight);
        }
    }

    public void Update()
    {
        CorrectColliderList();
        spriteHeight = spriteRenderer.transform.localPosition.y;
        FloorChecks();
    }

    public void FixedUpdate()
    {
        spriteRenderer.transform.position -= new Vector3(0, 1f, 0) * gravity; 
        entityHeight -= gravity * spriteToEntityRatio;
    }

    public void CorrectColliders()
    {
        foreach(Collider2D col in colliders)
        {
            HeightCollider colHeight = col.GetComponent<HeightCollider>();
            colHeight.dynamicColliderHeightLevel = colHeight.startingColliderHeightLevel + (int)entityHeight;
            colHeight.ChangeHeightLevel();
        }
    }

    public void CorrectColliderList()
    {
        foreach(Collider2D col in colliders)
        {
            HeightColliderList colHeightList = col.GetComponent<HeightColliderList>();
            for(int i = 0; i < colHeightList.dynamicColliderHeightLevels.Count; i++)
            { 
                colHeightList.dynamicColliderHeightLevels[i] = colHeightList.startingColliderHeightLevels[i] + (int)entityHeight;
                Debug.Log((int)entityHeight);
            }
            colHeightList.ChangeHeightLevels();
        }
    }
}