/**********************************************************************************
* Blueprint Reality Inc. CONFIDENTIAL
* 2019 Blueprint Reality Inc.
* All Rights Reserved.
*
* NOTICE:  All information contained herein is, and remains, the property of
* Blueprint Reality Inc. and its suppliers, if any.  The intellectual and
* technical concepts contained herein are proprietary to Blueprint Reality Inc.
* and its suppliers and may be covered by Patents, pending patents, and are
* protected by trade secret or copyright law.
*
* Dissemination of this information or reproduction of this material is strictly
* forbidden unless prior written permission is obtained from Blueprint Reality Inc.
***********************************************************************************/

#if UNITY_STANDALONE_WIN
using Microsoft.Win32;
using System;
using System.IO;
using System.Text;
using UnityEngine;
using UnityEngine.Assertions;
using System.Linq;

#if UNITY_EDITOR
using UnityEditor;
#endif

namespace BlueprintReality.MixCast
{
    public class MixCastRegistry
    {
        public const string REGISTRY_PATH = @"SOFTWARE\Blueprint Reality\MixCast VR";

        public const string SETTINGS_REGISTRY_KEY = "DATA";
        public const string SECURE_REGISTRY_KEY = "SETUP";

        public static bool shouldShowRegistryMismatchWarning = false;

        public static MixCastData ReadData()
        {
            using (RegistryKey reg = Registry.CurrentUser.CreateSubKey(REGISTRY_PATH))
            {
                Assert.IsNotNull(reg);
                string dataStr = reg.GetValue(SETTINGS_REGISTRY_KEY, null) as string;

                if (string.IsNullOrEmpty(dataStr))
                    return null;

                return JsonUtility.FromJson<MixCastData>(dataStr);
            }
        }

        public static void WriteData(MixCastData data)
        {
            string dataStr = JsonUtility.ToJson(data);
            using (RegistryKey reg = Registry.CurrentUser.CreateSubKey(REGISTRY_PATH))
                reg.SetValue(MixCastRegistry.SETTINGS_REGISTRY_KEY, dataStr);
        }

        public static void ClearData()
        {
            using (RegistryKey reg = Registry.CurrentUser.CreateSubKey(REGISTRY_PATH))
                reg.DeleteValue(MixCastRegistry.SETTINGS_REGISTRY_KEY, false);
        }
    }
}
#endif
