using UnityEditor;
using UnityEngine;

namespace ToolsBox.Raycast.Editors
{
    [CustomEditor(typeof(Raycast3D)), CanEditMultipleObjects]
    public class Raycast3DEditor : Editor
    {
        GUIStyle labelStyle => new GUIStyle(EditorStyles.label)
        {
            fontStyle = FontStyle.Bold,
        };

        public override void OnInspectorGUI()
        {
            serializedObject.Update();

            var inspectorTarget = target as Raycast3D;

            EditorGUILayout.Space(5);


            EditorGUILayout.PropertyField(serializedObject.FindProperty("_shape"));
            EditorGUILayout.PropertyField(serializedObject.FindProperty("_useOnUpdate"));
            EditorGUILayout.PropertyField(serializedObject.FindProperty("_useCastAll"));

            if (inspectorTarget.UseCastAll) EditorGUILayout.PropertyField(serializedObject.FindProperty("_maxCastToSave"));
            

                switch (inspectorTarget.Shape) {
                case (Raycast3D.RaycastShape.Line): DrawLineFields(); break;
                case (Raycast3D.RaycastShape.Box): DrawBoxFields(); break;
                case (Raycast3D.RaycastShape.Sphere): DrawSphereFields(); break;          
            }

            EditorGUILayout.Space(20);
            EditorGUILayout.LabelField("Debug", labelStyle);

            EditorGUILayout.PropertyField(serializedObject.FindProperty("_debugEnabled"));

            serializedObject.ApplyModifiedProperties();
        }
        

        void DrawLineFields()
        {
            EditorGUILayout.Space(10);
            EditorGUILayout.LabelField("Line Settings", labelStyle);
            EditorGUILayout.PropertyField(serializedObject.FindProperty("_lineOriginOffset"));
            EditorGUILayout.PropertyField(serializedObject.FindProperty("_lineDirection"));
            EditorGUILayout.PropertyField(serializedObject.FindProperty("_lineDistance"));
            EditorGUILayout.Space(5);
            EditorGUILayout.PropertyField(serializedObject.FindProperty("_lineLayerMask"));
        }

        void DrawBoxFields()
        {
            EditorGUILayout.Space(10);
            EditorGUILayout.LabelField("Line Settings", labelStyle);
            EditorGUILayout.PropertyField(serializedObject.FindProperty("_boxOriginOffset"));
            EditorGUILayout.PropertyField(serializedObject.FindProperty("_boxHalfSize"));
            EditorGUILayout.PropertyField(serializedObject.FindProperty("_boxRotation"));
            EditorGUILayout.PropertyField(serializedObject.FindProperty("_boxDirection"));
            EditorGUILayout.PropertyField(serializedObject.FindProperty("_boxDistance"));
            EditorGUILayout.Space(5);
            EditorGUILayout.PropertyField(serializedObject.FindProperty("_boxLayerMask"));
        }

        void DrawSphereFields()
        {
            EditorGUILayout.Space(10);
            EditorGUILayout.LabelField("Line Settings", labelStyle);
            EditorGUILayout.PropertyField(serializedObject.FindProperty("_sphereOriginOffset"));
            EditorGUILayout.PropertyField(serializedObject.FindProperty("_sphereRadius"));
            EditorGUILayout.PropertyField(serializedObject.FindProperty("_sphereDirection"));
            EditorGUILayout.PropertyField(serializedObject.FindProperty("_sphereDistance"));
            EditorGUILayout.Space(5);
            EditorGUILayout.PropertyField(serializedObject.FindProperty("_sphereLayerMask"));

        }


    }
}
