using IRaCIS.Core.Domain.Share;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using System;

namespace IRaCIS.Core.API
{
    public class JSONCustomDateConverter : DateTimeConverterBase
    {
        private TimeZoneInfo _timeZoneInfo;
        private string _dateFormat;

        private IUserInfo _userInfo;
        public JSONCustomDateConverter(string dateFormat, TimeZoneInfo timeZoneInfo, IUserInfo userInfo)
        {
            _dateFormat = dateFormat;
            _timeZoneInfo = timeZoneInfo;

            _userInfo = userInfo;
        }

        private static readonly TimeZoneInfo ChinaTimeZone = TimeZoneInfo.FindSystemTimeZoneById("Asia/Shanghai");

        public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
        {


            if (reader.ValueType == typeof(DateTime))
            {
                DateTime dateTime = (DateTime)reader.Value;

                var zoneTime = TimeZoneInfo.ConvertTime(dateTime, ChinaTimeZone);

                return zoneTime;
            }
            else
            {
                return reader.Value;
            }

        }

        public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
        {
            var timeZoneId = _userInfo.TimeZoneId;

            //var needConvertUtcDateTime = Convert.ToDateTime(value);


            //var tz = TimeZoneInfo.FindSystemTimeZoneById(timeZoneId);


            //var dateTimeOffset = new DateTimeOffset(needConvertUtcDateTime);

            //var time = TimeZoneInfo.ConvertTimeFromUtc(needConvertUtcDateTime, tz).ToString(_dateFormat);

            //writer.WriteValue(time);
            //writer.Flush();


            if (value is DateTime dateTime)
            {
                DateTime chinaTime = TimeZoneInfo.ConvertTime(dateTime, ChinaTimeZone);
                writer.WriteValue(chinaTime);
            }

        }

    }
}