using UnityEngine;

namespace NaughtyAttributes.Test
{
    public class MinMaxValueTest : MonoBehaviour
    {
        [MinValue(0)]
        public int min0Int;

        [MaxValue(0)]
        public int max0Int;

        [MinValue(0), MaxValue(1)]
        public float range01Float;

        [MinValue(0), MaxValue(1)]
        public Vector2 range01Vector2;

        [MinValue(0), MaxValue(1)]
        public Vector3 range01Vector3;

        [MinValue(0), MaxValue(1)]
        public Vector4 range01Vector4;

        [MinValue(0)]
        public Vector2Int min0Vector2Int;

        [MaxValue(100)]
        public Vector2Int max100Vector2Int;

        [MinValue(0)]
        public Vector3Int min0Vector3Int;

        [MaxValue(100)]
        public Vector3Int max100Vector3Int;

        public MinMaxValueNest1 nest1;
    }

    [System.Serializable]
    public class MinMaxValueNest1
    {
        [MinValue(0)]
        [AllowNesting] // Because it's nested we need to explicitly allow nesting
        public int min0Int;

        [MaxValue(0)]
        [AllowNesting] // Because it's nested we need to explicitly allow nesting
        public int max0Int;

        [MinValue(0), MaxValue(1)]
        [AllowNesting] // Because it's nested we need to explicitly allow nesting
        public float range01Float;

        [MinValue(0), MaxValue(1)]
        [AllowNesting] // Because it's nested we need to explicitly allow nesting
        public Vector2 range01Vector2;

        [MinValue(0), MaxValue(1)]
        [AllowNesting] // Because it's nested we need to explicitly allow nesting
        public Vector3 range01Vector3;

        [MinValue(0), MaxValue(1)]
        [AllowNesting] // Because it's nested we need to explicitly allow nesting
        public Vector4 range01Vector4;

        [MinValue(0)]
        [AllowNesting] // Because it's nested we need to explicitly allow nesting
        public Vector2Int min0Vector2Int;

        [MaxValue(100)]
        [AllowNesting] // Because it's nested we need to explicitly allow nesting
        public Vector2Int max100Vector2Int;

        [MinValue(0)]
        [AllowNesting] // Because it's nested we need to explicitly allow nesting
        public Vector3Int min0Vector3Int;

        [MaxValue(100)]
        [AllowNesting] // Because it's nested we need to explicitly allow nesting
        public Vector3Int max100Vector3Int;

        public MinMaxValueNest2 nest2;
    }

    [System.Serializable]
    public class MinMaxValueNest2
    {
        [MinValue(0)]
        [AllowNesting] // Because it's nested we need to explicitly allow nesting
        public int min0Int;

        [MaxValue(0)]
        [AllowNesting] // Because it's nested we need to explicitly allow nesting
        public int max0Int;

        [MinValue(0), MaxValue(1)]
        [AllowNesting] // Because it's nested we need to explicitly allow nesting
        public float range01Float;

        [MinValue(0), MaxValue(1)]
        [AllowNesting] // Because it's nested we need to explicitly allow nesting
        public Vector2 range01Vector2;

        [MinValue(0), MaxValue(1)]
        [AllowNesting] // Because it's nested we need to explicitly allow nesting
        public Vector3 range01Vector3;

        [MinValue(0), MaxValue(1)]
        [AllowNesting] // Because it's nested we need to explicitly allow nesting
        public Vector4 range01Vector4;

        [MinValue(0)]
        [AllowNesting] // Because it's nested we need to explicitly allow nesting
        public Vector2Int min0Vector2Int;

        [MaxValue(100)]
        [AllowNesting] // Because it's nested we need to explicitly allow nesting
        public Vector2Int max100Vector2Int;

        [MinValue(0)]
        [AllowNesting] // Because it's nested we need to explicitly allow nesting
        public Vector3Int min0Vector3Int;

        [MaxValue(100)]
        [AllowNesting] // Because it's nested we need to explicitly allow nesting
        public Vector3Int max100Vector3Int;
    }
}