using System;
using UnityEngine;

namespace Woop.Unity
{
    [DisallowMultipleComponent]
    public sealed class WoopCutoutRig2D : MonoBehaviour
    {
        [Serializable]
        public struct BoneBinding
        {
            public string partId;
            public Transform bone;
            public Transform spriteTransform;
        }

        [SerializeField] private Transform rigRoot;
        [SerializeField] private Transform rootBone;
        [SerializeField] private BoneBinding[] bones = Array.Empty<BoneBinding>();

        public Transform RigRoot => rigRoot;
        public Transform RootBone => rootBone;
        public BoneBinding[] Bones => bones;

        public void Configure(Transform importedRigRoot, Transform importedRootBone, BoneBinding[] importedBones)
        {
            rigRoot = importedRigRoot;
            rootBone = importedRootBone;
            bones = importedBones ?? Array.Empty<BoneBinding>();
        }

        public Transform FindBone(string partId)
        {
            foreach (BoneBinding binding in bones)
            {
                if (binding.partId == partId)
                    return binding.bone;
            }

            return null;
        }

        private void OnDrawGizmos()
        {
            if (bones == null)
                return;

            Gizmos.color = new Color(0.15f, 0.9f, 0.8f, 0.9f);
            foreach (BoneBinding binding in bones)
            {
                if (binding.bone == null)
                    continue;

                Gizmos.DrawWireSphere(binding.bone.position, 0.2f);
                Transform parent = binding.bone.parent;
                if (parent != null && parent != rigRoot)
                    Gizmos.DrawLine(parent.position, binding.bone.position);
            }
        }
    }
}
