namespace Znyc.CloudCar.Utility.Helper
{
    public static class DateHelper
    {
        /// <summary>
        ///     时间戳起始日期
        /// </summary>
        public static DateTime TimestampStart = new(1970, 1, 1, 0, 0, 0, 0);

        public static DateTime StampToDateTime(string time)
        {
            time = time.Substring(0, 10);
            double timestamp = Convert.ToInt64(time);
            System.DateTime dateTime = new System.DateTime(1970, 1, 1, 0, 0, 0, 0);
            dateTime = dateTime.AddSeconds(timestamp).ToLocalTime();
            return dateTime;
        }

        /// <summary>
        ///     转换为时间戳
        /// </summary>
        /// <param name="dateTime"></param>
        /// <param name="milliseconds">是否使用毫秒</param>
        /// <returns></returns>
        public static int ToTimestamp(this DateTime dateTime, bool milliseconds = false)
        {
            TimeSpan timestamp = dateTime.ToUniversalTime() - TimestampStart;
            return (int)(milliseconds ? timestamp.TotalMilliseconds : timestamp.TotalSeconds);
        }

        /// <summary>
        /// 出厂时间
        /// </summary>
        /// <param name="id"></param>
        /// <returns></returns>
        public static DateOutput GetAppearanceTimeAsync(long id)
        {
            DateOutput output = new DateOutput();
            switch (id)
            {
                case 8001:
                    output.Start = new DateTime(DateTime.Now.AddYears(-3).Year, 1, 1);
                    output.End = new DateTime(DateTime.Now.Year, 12, 31);
                    break;
                case 8002:
                    output.Start = new DateTime(DateTime.Now.AddYears(-5).Year, 1, 1);
                    output.End = new DateTime(DateTime.Now.AddYears(-3).Year, 12, 31);
                    break;
                case 8003:
                    output.Start = new DateTime(DateTime.Now.AddYears(-8).Year, 1, 1);
                    output.End = new DateTime(DateTime.Now.AddYears(-5).Year, 12, 31);
                    break;
                case 8004:
                    output.Start = new DateTime(DateTime.Now.AddYears(-12).Year, 1, 1);
                    output.End = new DateTime(DateTime.Now.AddYears(-8).Year, 12, 31);
                    break;
                case 8005:
                    output.Start = DateTime.MinValue;
                    output.End = new DateTime(DateTime.Now.AddYears(-12).Year, 12, 31);
                    break;
                default:
                    output.Start = DateTime.MinValue;
                    output.End = DateTime.MaxValue;
                    break;
            }
            return output;
        }

        public class DateOutput
        {
            public DateTime Start { get; set; }

            public DateTime End { get; set; }
        }
    }
}