using System.Collections.Generic;

namespace QuestValidator.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 QuestName { get; set; }
        public string _id { get; set; }
        public bool canShowNotificationsInGame { get; set; }
        public string changeQuestMessageText { get;set;}
        public Conditions conditions { get; set; }
        public string description { get;set;}
        public string failMessageText { get; set; }
        public string name { get; set; }
        public string note { get; set; }
        public object? questStatus { 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 string startedMessageText { get; set; }
        public string successMessageText { get; set; }
        public string templateId { get; set; }
        public Rewards rewards { get; set; }

        public string? side { 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<AvailableFor> 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 object maxDurability { get; set; }
        public int? minDurability { get; set; }
        public List<object> visibilityConditions { get; set; }
        public List<int> status { get; set; }
    }

    public class Counter
    {
        public string id { get; set; }
    }

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

    public class AvailableForProps
    {
        public object counter { get; set;}
        public int? dogtagLevel { get; set; }
        public string id { get; set; }
        public int? index { get; set; }
        public object maxDurability { get; set; }
        public object minDurability { get; set; }
        public string parentId { get; set; }
        public bool? resetOnSessionEnd { get; set; }
        public bool? isEncoded { get;set; }
        public bool? onlyFoundInRaid { get; set; }
        public bool? oneSessionOnly { get; set; }
        public bool dynamicLocale { get;set;}
        public object? plantTime { get; set; }
        public string zoneId { get; set; }
        public object target { get; set; }
        public string type { get;set;}
        public bool? countInRaid { get;set;}
        public object status { get; set;}
        public bool? unknown { get; set; }
        public bool? doNotResetIfCounterCompleted { get; set; }
        public object value { get; set; }
        public int? availableAfter { get; set; }
        public int? dispersion { get; set; }
        public string compareMethod { get;set;}
        public List<object> visibilityConditions { get; set; }
        public SkillCondition baseAccuracy { get;set;}
        public SkillCondition durability { get; set; }
        public SkillCondition effectiveDistance { get; set; }
        public SkillCondition emptyTacticalSlot { get; set; }
        public SkillCondition ergonomics { get; set; }
        public SkillCondition height { get; set; }
        public SkillCondition magazineCapacity { get; set; }
        public SkillCondition muzzleVelocity { get; set; }
        public SkillCondition recoil { get; set; }
        public SkillCondition weight { get; set; }
        public SkillCondition width { get; set; }
        public object containsItems { get; set; }
        public object hasItemFromCategory { get; set; }
    }

    public class SkillCondition
    {
        public string compareMethod { get; set; }
        public object value { 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 bool? unknown { get; set; }
        public bool? findInRaid {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 object upd { get; set; }
        public string parentId { get; set; }
        public string slotId { get; set; }
    }

    public class QuestRewardUpd
    {
        public int? StackObjectsCount { get; set; }
        public FireModeReward FireMode { get; set; }
        public FoldeableReward Foldable { get; set; }
    }

    public class FireModeReward
    {
        public string FireMode { get; set; }
    }

    public class FoldeableReward
    {
        public bool? Folded { get; set; }
    }
}