﻿using ARGOFoundation;
using UnityEditor;
using UnityEngine;

namespace ARGOEditor
{
    [ExecuteInEditMode]
    public class Scene : MonoBehaviour
    {
        private static GameObject sceneGO;
        private static GameObject markerGO ;
        private static Bootstrapper bootstrapper;

        private int markerId = -1;
        private Marker marker;

        public static Scene NewScene(int markerId)
        {
            sceneGO = new GameObject($"ARGO Scene for markerID + {markerId}");

            var scene = sceneGO.AddComponent<Scene>();
            scene.markerId = markerId;
            scene.LoadFoundation();
            scene.CreateMarker();
            return scene;
        }

        private void LoadFoundation()
        {
            bootstrapper = gameObject.AddComponent<Bootstrapper>();

            var settings = UserSettings.GetOrCreateSettings();

            bootstrapper.SetConfig(settings);
        }

        private void CreateMarker()
        {
            markerGO = new GameObject("Marker with ID + " + markerId.ToString());
            marker = markerGO.AddComponent<Marker>();
            marker.Id = markerId;
            marker.OnMarkerLoadingError += error => EditorUtility.DisplayDialog("Marker loading failed", $"Check marker Id and try again. Error: {error} ", "OK");
            marker.Activate();
        }

        public bool DestroyScene()
        {
            if (sceneGO == null) return false;

            DestroyImmediate(gameObject);
            DestroyImmediate(markerGO);
            sceneGO = null;

            return true;
        }
    }
}
