using UnityEngine;
using Cinemachine;

public class FreeLookCamera360Panning : MonoBehaviour
{
    public CinemachineFreeLook freeLookCamera;
    public Transform player; // Player's Transform to follow
    public float panSpeed = 10f; // Speed of panning
    public float edgeThreshold = 10f; // Edge detection range in pixels

    private bool isPanning = false;

    void Update()
    {
        HandleEdgeScrolling();
    }

    void HandleEdgeScrolling()
    {
        Vector3 mousePos = Input.mousePosition;
        float screenWidth = Screen.width;
        float screenHeight = Screen.height;
        Vector3 moveDirection = Vector3.zero;

        // Detect if cursor is near screen edges
        if (mousePos.x <= edgeThreshold) moveDirection += -freeLookCamera.transform.right; // Move left
        if (mousePos.x >= screenWidth - edgeThreshold) moveDirection += freeLookCamera.transform.right; // Move right
        if (mousePos.y <= edgeThreshold) moveDirection += -freeLookCamera.transform.forward; // Move backward
        if (mousePos.y >= screenHeight - edgeThreshold) moveDirection += freeLookCamera.transform.forward; // Move forward

        if (moveDirection != Vector3.zero)
        {
            if (!isPanning)
            {
                freeLookCamera.Follow = null; // Stop following the player
                freeLookCamera.LookAt = null; // Stop aiming at the player
                isPanning = true;
            }

            // Move the camera in world space (360-degree movement)
            freeLookCamera.transform.Translate(moveDirection * panSpeed * Time.deltaTime, Space.World);
        }
        else
        {
            if (isPanning)
            {
                freeLookCamera.Follow = player; // Re-enable following the player
                freeLookCamera.LookAt = player; // Re-enable aiming at the player
                isPanning = false;
            }
        }
    }
}