using System;
using UnityEngine;

namespace UnityEditor.U2D.Animation
{
    internal class SkeletonToolWrapper : BaseTool
    {
        private SkeletonTool m_SkeletonTool;
        private SkeletonMode m_Mode;

        public SkeletonTool skeletonTool
        {
            get { return m_SkeletonTool; }
            set { m_SkeletonTool = value; }
        }

        public SkeletonMode mode
        {
            get { return m_Mode; }
            set { m_Mode = value; }
        }

        public bool editBindPose { get; set; }

        public override int defaultControlID
        {
            get
            {
                Debug.Assert(skeletonTool != null);

                return skeletonTool.defaultControlID;
            }
        }

        protected override void OnActivate()
        {
            Debug.Assert(skeletonTool != null);
            skeletonTool.enableBoneInspector = true;
            skeletonTool.Activate();
        }

        protected override void OnDeactivate()
        {
            skeletonTool.enableBoneInspector = false;
            skeletonTool.Deactivate();
        }

        private SkeletonMode OverrideMode()
        {
            var modeOverride = mode;

            //Disable SkeletonManipulation if character exists and we are in SpriteSheet mode
            if (skinningCache.mode == SkinningMode.SpriteSheet && skinningCache.hasCharacter && editBindPose)
                modeOverride = SkeletonMode.Selection;

            return modeOverride;
        }

        protected override void OnGUI()
        {
            Debug.Assert(skeletonTool != null);

            skeletonTool.mode = OverrideMode();
            skeletonTool.editBindPose = editBindPose;
            skeletonTool.DoGUI();
        }
    }
}