using UnityEngine;

public class CameraManager : MonoBehaviour
{
    [Header("Target Settings")]
    public Transform target;
    
    [Header("Position Settings")]
    public Vector3 offset = new Vector3(0f, 10f, -5f);
    public float followSpeed = 10f;
    
    [Header("Zoom Settings")]
    public float zoomSpeed = 5f;
    public float minZoomHeight = 5f;
    public float maxZoomHeight = 15f;
    public float zoomZRatio = 0.5f; // How much Z changes relative to Y when zooming

    // Current zoom level (0 = min zoom, 1 = max zoom)
    private float zoomLevel = 0.5f;
    
    // Fixed camera rotation
    public Vector3 cameraRotation = new Vector3(45f, 0f, 0f);

    void Start()
    {
        if (target == null)
        {
            Debug.LogWarning("No target assigned to CameraManager!");
            return;
        }
        
        // Set initial rotation
        transform.eulerAngles = cameraRotation;
        
        // Position the camera immediately at start
        UpdateCameraPosition(false);
    }

    void LateUpdate()
    {
        if (target == null)
            return;
            
        // Handle zoom input
        float scrollInput = Input.GetAxis("Mouse ScrollWheel");
        if (scrollInput != 0)
        {
            // Update zoom level
            zoomLevel = Mathf.Clamp01(zoomLevel - scrollInput * zoomSpeed * Time.deltaTime);
        }
        
        // Update camera position with smoothing
        UpdateCameraPosition(true);
        
        // Ensure the camera rotation stays fixed
        transform.eulerAngles = cameraRotation;
    }
    
    void UpdateCameraPosition(bool smooth)
    {
        // Calculate height and Z offset based on zoom level
        float height = Mathf.Lerp(minZoomHeight, maxZoomHeight, zoomLevel);
        float zOffset = -Mathf.Lerp(minZoomHeight * zoomZRatio, maxZoomHeight * zoomZRatio, zoomLevel);
        
        // Create the target position
        Vector3 targetPosition = target.position + new Vector3(0, height, zOffset);
        
        if (smooth)
        {
            // Smoothly move towards the target position
            transform.position = Vector3.Lerp(transform.position, targetPosition, followSpeed * Time.deltaTime);
        }
        else
        {
            // Instantly set position
            transform.position = targetPosition;
        }
    }
}