/****************************************************************************
* Copyright 2019 Nreal Techonology Limited. All rights reserved.
*                                                                                                                                                          
* This file is part of NRSDK.                                                                                                          
*                                                                                                                                                           
* https://www.nreal.ai/        
* 
*****************************************************************************/

namespace NRKernal
{
    using System;
    using UnityEngine;

    /// <summary> A nr tools. </summary>
    public class NRTools
    {
        /// <summary> Full pathname of the persistent data file. </summary>
        private static string persistentDataPath;

        /// <summary> Initializes this object. </summary>
        public static void Init()
        {
            persistentDataPath = Application.persistentDataPath;
        }

        #region path utility
        /// <summary> Gets streaming assets path. </summary>
        /// <returns> The streaming assets path. </returns>
        public static string GetStreamingAssetsPath()
        {
            string path = Application.streamingAssetsPath;
#if UNITY_EDITOR || UNITY_STANDALONE
            path = "file://" + Application.streamingAssetsPath + "/";
#elif UNITY_IPHONE
            path = Application.dataPath +"/Raw/";
#elif UNITY_ANDROID
            path ="jar:file://" + Application.dataPath + "!/assets/";
#endif
            return path;
        }

        /// <summary> Gets sdcard path. </summary>
        /// <returns> The sdcard path. </returns>
        public static string GetSdcardPath()
        {
            string path = null;
#if UNITY_EDITOR_WIN || UNITY_STANDALONE_WIN
            path = System.IO.Directory.GetParent(Application.dataPath).ToString() + "/";
#elif UNITY_EDITOR_OSX || UNITY_STANDALONE_OSX
            path = "file://" + System.IO.Directory.GetCurrentDirectory()+"/";
#elif UNITY_ANDROID
            path ="file:///storage/emulated/0/";
#endif
            return path;
        }

        /// <summary> Gets tracking image data generate path. </summary>
        /// <returns> The tracking image data generate path. </returns>
        public static string GetTrackingImageDataGenPath()
        {
#if UNITY_EDITOR
            string path = Application.persistentDataPath + "/TrackingImageData/";
#else
            string path = persistentDataPath + "/TrackingImageData/";
#endif
            return path;
        }
        #endregion

        #region time stamp
        /// <summary> Gets time by m seconds. </summary>
        /// <param name="ms"> The milliseconds.</param>
        /// <returns> The time by m seconds. </returns>
        public static string GetTimeByMSeconds(long ms)
        {
            int s = (int)ms / 1000;
            int h = (int)(s / 3600);
            int m = (s % 3600) / 60;
            s = (s % 3600) % 60;
            return string.Format("{0}:{1}:{2}", h > 10 ? h.ToString() : "0" + h, m > 10 ? m.ToString() : "0" + m, s > 10 ? s.ToString() : "0" + s);
        }

        /// <summary> Gets time stamp. </summary>
        /// <returns> The time stamp. </returns>
        public static ulong GetTimeStamp()
        {
            TimeSpan ts = DateTime.Now - new DateTime(1970, 1, 1, 0, 0, 0, 0);
            return Convert.ToUInt64(ts.TotalMilliseconds);
        }

        /// <summary> Gets time stamp. </summary>
        /// <returns> The time stamp. </returns>
        public static ulong GetTimeStampNanos()
        {
            return GetTimeStamp() * 1000000;
        }
        #endregion
    }
}