#if UNITY_5_3_OR_NEWER
using UnityEngine;

namespace Passer.Control.Unity {

    public class TouchSensor : Thing {

        public Core.TouchSensor coreSensor {
            get => (Core.TouchSensor)base.core;
        }

        protected virtual void Start() {
            if (core == null) {
                SiteServer siteServer = FindAnyObjectByType<SiteServer>();
                SetCoreThing(new Core.TouchSensor(siteServer.site));
            }

        }

        public static TouchSensor Create(Core.TouchSensor core) {
            GameObject gameObj = core.name != null ?
                new(core.name) :
                new("Touch Sensor");
            TouchSensor component = gameObj.AddComponent<TouchSensor>();
            Rigidbody rb = gameObj.AddComponent<Rigidbody>();
            rb.isKinematic = true;

            SphereCollider collider = gameObj.AddComponent<SphereCollider>();
            collider.radius = 0.01F;
            collider.isTrigger = true;

            component.core = core;
            if (core.parent != null && core.parent.component != null)
                gameObj.transform.SetParent(core.parent.component.transform, false);

            if (core.position != null)
                gameObj.transform.localPosition = core.position.ToVector3();

            return component;
        }

        private void OnTriggerEnter(Collider other) {
            if (other.isTrigger)
                return;
            if (this.transform.root == other.transform.root)
                return;
 
            Debug.Log($"touched {other.gameObject.name}");
            this.coreSensor.touchedSomething = true;
        }
        private void OnTriggerExit(Collider other) {
            if (other.isTrigger)
                return;

            this.coreSensor.touchedSomething = false;
        }
    }
}
#endif