using System.Collections.Generic;

namespace AssortValidator.Models
{
    public class QuestRoot
    {
        public int err { get; set; }
        public object errmsg { get; set; }
        public List<Quest> data { get; set; }
    }

    public class Quest
    {
        public string _id { get; set; }
        public bool canShowNotificationsInGame { get; set; }
        public Conditions conditions { get; set; }
        public string traderId { get; set; }
        public string location { get; set; }
        public string image { get; set; }
        public string type { get; set; }
        public bool? isKey { get; set; }
        public bool restartable { get; set; }
        public bool instantComplete { get; set; }
        public bool secretQuest { get; set; }
        public int min_level { get; set; }
        public Rewards rewards { get; set; }
    }

    public class Conditions
    {
        public string _parent { get; set; }
        public ConditionProps _props { get; set; }
        public List<AvailableFor> AvailableForFinish { get; set; }
        public List<AvailableFor> AvailableForStart { get; set; }
        //public List<object> Fail { get; set; }
    }

    public class ConditionProps
    {
        public string compareMethod { get; set; }
        public string id { get; set; }
        public object target { get; set; }
        public string value { get; set; }
        public Counter counter { get; set; }
        public int index { get; set; }
        public string parentId { get; set; }
        public string type { get; set; }
        public int? dogtagLevel { get; set; }
        public int? maxDurability { get; set; }
        public int? minDurability { get; set; }
        public List<object> visibilityConditions { get; set; }
        public List<int> status { get; set; }
    }

    public class Counter
    {
        //public List<Condition> conditions { get; set; }
        public string id { get; set; }
    }

    public class AvailableFor
    {
        public string _parent { get; set; }
        public AvailableForProps _props { get; set; }
    }

    public class AvailableForProps
    {
        public int dogtagLevel { get; set; }
        public string id { get; set; }
        public int? index { get; set; }
        public int? maxDurability { get; set; }
        public int? minDurability { get; set; }
        public string parentId { get; set; }
        public bool resetOnSessionEnd { get; set; }
        public object target { get; set; }
        //public int value { get; set; }
        public List<object> visibilityConditions { get; set; }
    }

    public class Rewards
    {
        public List<RewardStatus> Started { get; set; }
        public List<RewardStatus> Success { get; set; }
        public List<RewardStatus> Fail { get; set; }
    }

    public class RewardStatus
    {
        public object value { get; set; }
        public string id { get; set; }
        public string type { get; set; }
        public int index { get; set; }
        public string target { get; set; }
        public List<QuestRewardItem> items { get; set; }
        public int? loyaltyLevel { get; set; }
        public string traderId { get; set; }
    }

    public class QuestRewardItem
    {
        public string _id { get; set; }
        public string _tpl { get; set; }
        public QuestRewardUpd upd { get; set; }
        public string parentId { get; set; }
        public string slotId { get; set; }
    }

    public class QuestRewardUpd
    {
        public int StackObjectsCount { get; set; }
    }
}