using GatherAndDefend.Events;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using static LevelManager;

public class KeepLevelAnchored : MonoBehaviour
{
    Camera _camera;
    Rect _levelBound;
    bool _boundCalculated = false;
    // Start is called before the first frame update
    void Start()
    {
        _camera = Camera.main;
        EventAggregator.Instance.GetEvent<LevelLoadedEvent>().Attach(CalculateBound);

        if (!LevelManager.Instance.CurrentLevel) return;
        CalculateBound(LevelManager.Instance.CurrentLevel);
    }

    private void CalculateBound(GatherAndDefend.LevelEditor.Level level)
    {
        _boundCalculated = false;
        _levelBound = level.CalculateBounds();
        _boundCalculated = true;
    }

    void OnDestroy()
    {
        EventAggregator.Instance.GetEvent<LevelLoadedEvent>().Attach(CalculateBound);
    }

    // Update is called once per frame
    void Update()
    {
        if (!_boundCalculated) return;
        //move right
        var xMax = _levelBound.xMax;
        var width = _camera.ScreenToWorldPoint(Vector2.one * _camera.pixelWidth).x;
        var rightDiff = width - xMax;
        var camPos = _camera.transform.position;
        
        camPos.x -= rightDiff;

        _camera.transform.position = camPos;
        

        //resize
        var xMin = _levelBound.xMin;
        var left = _camera.ScreenToWorldPoint(Vector2.zero).x;
        var center = _camera.ScreenToWorldPoint(Vector2.one * _camera.pixelWidth / 3).x;

        var leftDiff = xMax - xMin;
        var centerDiff = xMax - center;

        var ratio = centerDiff / leftDiff;

        _camera.orthographicSize /= ratio;
        return;
        
    }
}
