using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using Cinemachine;
using UnityEngine;

public class SidelineCamera : MonoBehaviour
{
    CinemachineVirtualCamera _vcam;
    CinemachineTrackedDolly _dolly;
    float _pathPct;
    [SerializeField] float _durationForFullLoop = 10f;
    [SerializeField] List<Battler> _sortedBattlers;

    private Battler _lastLookedAtBattler;
    
    void Awake()
    {
        _vcam = GetComponent<CinemachineVirtualCamera>();
        _dolly = _vcam.GetCinemachineComponent<CinemachineTrackedDolly>();
    }

    void Update()
    {
        _pathPct += Time.deltaTime / _durationForFullLoop;
        if (_pathPct > 1f)
            _pathPct -= 1f;
        _dolly.m_PathPosition = _pathPct;

        _sortedBattlers =
            SideLine.ActiveBattlers.OrderBy(battler => Vector3.Distance(Camera.main.transform.position, battler.transform.position)).ToList();
        
        var nearestBattler = _sortedBattlers.FirstOrDefault();
        
        if (nearestBattler != null && _lastLookedAtBattler != nearestBattler)
        {
	        _lastLookedAtBattler = nearestBattler;
	        
            Debug.Log($"Looking at {nearestBattler.name}");
            _vcam.LookAt = nearestBattler.transform;
        }
    }
}
