using UnityEngine;
using UnityEditor;

namespace GitMerge
{
    /// <summary>
    /// The MergeAction that handles a GameObject which exists in "our" version but not "theirs".
    /// </summary>
    public class MergeActionDeleteGameObject : MergeActionExistence
    {
        private bool oursWasActive;

        public MergeActionDeleteGameObject(GameObject ours, GameObject theirs)
            : base(ours, theirs)
        {
            oursWasActive = ours.activeSelf;

            if (GitMergeWindow.automerge)
            {
                UseOurs();
                merged = true;
                usingTheirs = false;
                usingOurs = true;
            }
        }

        protected override void ApplyOurs()
        {
            Debug.Log("ApplyOurs called");
            ours.SetActiveForMerging(true);
            ours.SetActive(oursWasActive);
        }

        protected override void ApplyTheirs()
        {
            Debug.Log("ApplyOurs deleting their GameObject");

            ours.SetActiveForMerging(false);
            SceneView.RepaintAll();
        }

        public override void EnsureExistence()
        {
            UseOurs();
        }

        public override void OnGUI()
        {
            var defaultOptionColor = merged ? Color.gray : Color.white;

            GUI.color = usingOurs ? Color.green : defaultOptionColor;
            if (GUILayout.Button("Keep GameObject"))
            {
                UseOurs();
            }
            GUI.color = usingTheirs ? Color.green : defaultOptionColor;
            if (GUILayout.Button("Delete GameObject"))
            {
                UseTheirs();
            }
        }
    }
}