using UnityEngine;

namespace pdinklag.CPW.Common
{
    [RequireComponent(typeof(Animator))]
    [RequireComponent(typeof(BodyDescription))]
    public class CAWBaseMesh : CAWMesh
    {
        [Header("Nudity")]
        [Tooltip("The potentially problematic graphic nudity on this base mesh.")]
        public CAWNudity Nudity;

        [Tooltip("An overlay texture that covers up the base mesh's nipples.")]
        public Texture2D NudityUpperOverlay;

        [Tooltip("An overlay texture that covers up the base mesh's buttocks and genitalia.")]
        public Texture2D NudityLowerOverlay;

        [Header("Eyes")]
        [Tooltip("The index of the left eye material.")]
        public int LeftEyeMaterialIndex = 1;

        [Tooltip("The index of the right eye material.")]
        public int RightEyeMaterialIndex = 2;

        [Tooltip("The eye overlay texture for the iris.")]
        public Texture2D IrisOverlay;

        [Tooltip("The default eye color.")]
        public Color DefaultEyeColor = Color.red;

        [Header("Skeleton Params")]
        [Tooltip("The value range for Y shift.")]
        public MinMax YShiftRange = new MinMax(-0.25f, 0.25f);

        [Tooltip("The value range for leg length.")]
        public MinMax LegLengthValueRange = new MinMax(0.75f, 1.25f);

        [Tooltip("The value range for arm length.")]
        public MinMax ArmLengthValueRange = new MinMax(0.75f, 1.25f);

        [Tooltip("The value range for shoulder width.")]
        public MinMax ShoulderWidthValueRange = new MinMax(0.75f, 1.25f);

        [Tooltip("The value range for neck length.")]
        public MinMax NeckLengthValueRange = new MinMax(0.75f, 1.25f);

        [Tooltip("The value range for torso length.")]
        public MinMax TorsoLengthValueRange = new MinMax(0.75f, 1.25f);

        [Tooltip("The value range for finger length.")]
        public MinMax FingerLengthValueRange = new MinMax(0.75f, 1.25f);

        [Tooltip("The value range for foot length.")]
        public MinMax FootLengthValueRange = new MinMax(0.75f, 1.25f);

        [Header("Bone Scale Params")]
        [Tooltip("The value range for head size.")]
        public MinMax HeadSizeRange = new MinMax(0.75f, 1.25f);

        [Tooltip("The value range for body proportion.")]
        public MinMax UpperBodyWidthRange = new MinMax(0.75f, 1.25f);

        [Tooltip("The value range for hand size.")]
        public MinMax HandSizeRange = new MinMax(0.75f, 1.25f);

        [Tooltip("The value range for foot size.")]
        public MinMax FootSizeRange = new MinMax(0.75f, 1.25f);

        [Header("Body Weight")]
        [Tooltip("The weight of the unmorphed wrestler.")]
        public float BodyWeightBase = 100.0f;

        [Tooltip("The weight of the head, used for body weight modification.")]
        public float HeadWeight = 8.0f;

        [Tooltip("The weight of the upper torso, used for body weight modification.")]
        public float ThoraxWeight = 20.0f;

        [Tooltip("The weight of the arms, used for body weight modification.")]
        public float ArmsWeight = 10.0f;

        [Tooltip("The weight of the legs, used for body weight modification.")]
        public float LegsWeight = 20.0f;

        [Tooltip("The weight of the hands, used for body weight modification.")]
        public float HandsWeight = 2.0f;

        [Tooltip("The weight of the feet, used for body weight modification.")]
        public float FeetWeight = 5.0f;

        [Header("Global Morphs")]
        [Tooltip("The global blend shapes for components compatible to this base mesh.")]
        public BlendShape[] GlobalBlendShapes;
    }
}
