using Knoks.Core.Entities.Interfaces;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Linq;
using System;
using System.Collections.Generic;
using System.Text;

namespace Knoks.Core.Entities
{
    //public class MicrosoftSecondsDateTimeConverter : DateTimeConverterBase
    //{
    //    private static readonly DateTime epoch = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc);

    //    public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
    //    {
    //        if (reader.TokenType == JsonToken.Null)
    //            return null;

    //        var token = JToken.Load(reader);
    //        if (token.Type == JTokenType.Integer)
    //        {
    //            var dt = epoch.AddMilliseconds((long)token);
    //            return dt;
    //        }

    //        // Not a Microsoft date.
    //        return new JsonSerializer().Deserialize(token.CreateReader(), objectType);
    //    }

    //    public override bool CanWrite { get { return true; } }

    //    public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
    //    {
    //        //writer.WriteValue((((DateTime)value).Ticks - epoch.Ticks) / 1000);
    //        writer.WriteValue(System.Convert.ToInt64((((DateTime)value) - epoch).TotalMilliseconds));
    //    }
    //}

    public class KnokOngoing : IApiResult
    {
        public Knokser Knokser { get; set; }
        public OngoingKnok Knok { get; set; }
        public OngoingStatus Status { get; set; }
        public ChartItem[] ChartData { get; set; }
    }
    
    public class OngoingKnok
    {
        [JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
        public long? KnokId { get; set; }
        public string Currency1 { get; set; }
        public string Currency2 { get; set; }
        public string Currency { get; set; }
        public string MarketDisplayName { get; set; }
        public int ExchangeId { get; set; }
        public string ExchangeName { get; set; }
        //[JsonConverter(typeof(MicrosoftSecondsDateTimeConverter))]
        public DateTime CreateDate { get; set; }
        public int Duration { get; set; }
        public decimal EntryPriceFrom { get; set; }
        public decimal EntryPriceTo { get; set; }
        public decimal ExitPriceFrom { get; set; }
        public decimal ExitPriceTo { get; set; }
        public decimal StopLoss { get; set; }
        public decimal? CurrentPrice { get; set; }
        [JsonIgnore]
        public decimal PotentialProfitValue { get; set; }
        public decimal CurrentProfit { get; set; }
        public decimal PotentialProfit { get {
                return this.PotentialProfitValue;
            }
            set { }
        }
        public decimal UserReview { get; set; }
        public decimal UserReviewMax
        {
            get
            {
                return Constants.knokserFeedbackMax;
            }
            set { }
        }
        public short Precision { get; set; }
        public decimal PricePool
        {
            get
            {
                return this.PricePoolData.HasValue ? this.PricePoolData.Value * Constants.knokserCommission : 0; 
            }
            set { }
        }
        [JsonIgnore]
        public decimal? PricePoolData { get; set; }
        public bool? FeedbackExists { get; set; }
        public int MinutesLeftOnFeed { get; set; }
    }

    public class OngoingStatus
    {
        public int Purchases { get; set; }
    }
}
