using System.Collections.Generic;
using System.Linq;
using UnityEngine;
using UnityEngine.Events;
using UnityEngine.XR.ARFoundation;
using UnityEngine.XR.ARSubsystems;


public class ImageRecognitionBasic : MonoBehaviour
{
    public string ReferenceImageName;  //refer name to the image in the image library, this name should be exactly same as the respective image name in library
    private ARTrackedImageManager _TrackedImageManager; //reference to the ARTrackedImageManager to manages the tracking images
    public Dictionary<string, GameObject> modelPrefabs; 
    
    private void Awake()  //initializes _TrackedImageManager by finding an object ARTrackedImageManager, when the script instance loaded
    {
        _TrackedImageManager = FindObjectOfType<ARTrackedImageManager>(); 
         
    }
 
    private void OnEnable()
    {
        if (_TrackedImageManager != null)
        {
            _TrackedImageManager.trackedImagesChanged += OnTrackedImagesChanged;  //called whenever there's a change in the tracked images
        }
    }

    private void OnDisable()
    {
        if (_TrackedImageManager != null)
        {
            _TrackedImageManager.trackedImagesChanged -= OnTrackedImagesChanged;
        }
    }

    private void OnTrackedImagesChanged(ARTrackedImagesChangedEventArgs e)
    {
        foreach (var trackedImage in e.added)
        {
            Debug.Log($"Tracked image detected: {trackedImage.referenceImage.name} with size: {trackedImage.size}");
        }

        UpdateTrackedImages(e.added);
        UpdateTrackedImages(e.updated);
        UpdateTrackedImages(e.removed);
    }

    private void UpdateTrackedImages(IEnumerable<ARTrackedImage> trackedImages)
    {
        // If the same image (ReferenceImageName)
        var trackedImage =
            trackedImages.FirstOrDefault(x => x.referenceImage.name == ReferenceImageName);
        if (trackedImage == null)
        {
            return;
        }

        if (trackedImage.trackingState != TrackingState.None)
        {
            var trackedImageTransform = trackedImage.transform;
            transform.SetPositionAndRotation(trackedImageTransform.position, trackedImageTransform.rotation);
            this.gameObject.GetComponent<ObjectDropper>().objectWasScanned();
        }
    }

    
}