#if UNITY_EDITOR || UNITY_IOS || UNITY_TVOS || PACKAGE_DOCS_GENERATION
using System;
using UnityEngine.InputSystem.iOS;

namespace UnityEngine.InputSystem.iOS
{
    /// <summary>
    /// Governs access to a privacy-related resource on the user's device. Corresponds to a key in the application's
    /// Information Property List (Info.plist).
    /// </summary>
    /// <seealso href="https://developer.apple.com/documentation/bundleresources/information_property_list/protected_resources"/>
    [Serializable]
    public class PrivacyDataUsage
    {
        /// <summary>
        /// Whether access to the respective resource will be requested.
        /// </summary>
        /// <remarks>
        /// Before accessing a resource or a sensor, you need to explicitly enable the usage for it, otherwise the access for the resource will be denied.
        ///
        /// If this is set to true, the respective protected resource key will be entered in the application's Information Property List (Info.plist)
        /// using <see cref="usageDescription"/>.
        /// </remarks>
        public bool enabled
        {
            get => m_Enabled;
            set => m_Enabled = value;
        }

        /// <summary>
        /// Provide meaningful usage description.
        /// </summary>
        /// <remarks>
        /// The description will be presented to the user in the dialog when you'll try to access a related resource or sensor.
        /// </remarks>
        public string usageDescription
        {
            get => m_Description;
            set => m_Description = value;
        }

        [SerializeField] private bool m_Enabled;
        [SerializeField] private string m_Description;
    }
}

namespace UnityEngine.InputSystem
{
    public partial class InputSettings
    {
        /// <summary>
        /// Project-wide input settings for the iOS/tvOS platform.
        /// </summary>
        [Serializable]
        public class iOSSettings
        {
            /// <summary>
            /// Setting for access to the device's motion sensors (such as <see cref="StepCounter"/>).
            /// </summary>
            /// <remarks>
            /// Alternatively, you can manually add <c>Privacy - Motion Usage Description</c> to the Info.plist file.
            /// </remarks>
            /// <seealso cref="StepCounter"/>
            /// <seealso href="https://developer.apple.com/documentation/bundleresources/information_property_list/nsmotionusagedescription"/>
            public PrivacyDataUsage motionUsage
            {
                get => m_MotionUsage;
                set => m_MotionUsage = value;
            }

            [SerializeField] private PrivacyDataUsage m_MotionUsage = new PrivacyDataUsage();
        }

        /// <summary>
        /// iOS/tvOS-specific settings.
        /// </summary>
        /// <remarks>
        /// This is only accessible in the editor or in iOS/tvOS players.
        /// </remarks>
        public iOSSettings iOS => m_iOSSettings;

        [SerializeField]
        private iOSSettings m_iOSSettings = new iOSSettings();
    }
}

#endif