﻿using UnityEngine;
using UnityEditor;

namespace Febucci.Attributes
{
    [CustomPropertyDrawer(typeof(CharsDisplayTimeAttribute))]
    public class CharsDisplayTimeAttributeDrawer : PropertyDrawer
    {
        const float minWaitTime = 0.0001f;

        public override void OnGUI(Rect position, SerializedProperty property, GUIContent label)
        {
            //delay in seconds
            Rect delayValueRect = new Rect(position.x, position.y, 70 + 230 - position.x, position.height);
            delayValueRect.width = Mathf.Clamp(position.width * 0.6f, 170, position.width);

            Rect delayLabel = new Rect(delayValueRect);
            delayLabel.x += delayLabel.width - 15;
            delayLabel.width = 77;

            Rect charPerSecValueRect = new Rect(delayLabel);
            charPerSecValueRect.x += charPerSecValueRect.width - 15;
            charPerSecValueRect.width = 65;


            Rect charPerSecLabelRect = new Rect(charPerSecValueRect);
            charPerSecLabelRect.x += charPerSecLabelRect.width - 15;
            charPerSecLabelRect.width = 120;

            switch (property.propertyType)
            {
                case SerializedPropertyType.Float:

                    property.floatValue = EditorGUI.FloatField(delayValueRect, label, property.floatValue);

                    EditorGUI.LabelField(delayLabel, $"s delay, ≈");



                    int charPerSecond = Mathf.RoundToInt(1 / property.floatValue);

                    EditorGUI.LabelField(charPerSecLabelRect, "chars per sec");
                    EditorGUI.BeginChangeCheck();
                    charPerSecond = EditorGUI.IntField(charPerSecValueRect, charPerSecond);

                    if (EditorGUI.EndChangeCheck())
                    {
                        property.floatValue = 1f/charPerSecond;
                    }

                    if (property.floatValue < minWaitTime)
                        property.floatValue = minWaitTime;

                    break;


                default: //unsupported, fallback to the default OnGUI
                    EditorGUI.PropertyField(position, property, label);
                    return;
            }

        }

    }

}