using System.Collections.Generic;

namespace QuestValidator.Common.Models
{
    public class ItemsLibRoot
    {
        public List<Dictionary<string, Item>> items { get; set; }
    }

    public class Item
    {
        public string _id { get; set; }
        public string _name { get; set; }
        public string _parent { get; set; }
        public string _type { get; set; }
        public Props _props { get; set; }
    }

    public class Props
    {
        public string Name { get; set; }
        public string ShortName { get; set; }
        public string Description { get; set; }
        public int SpawnChance { get;set;}
        public List<string> SpawnFilter { get; set; }
        public List<Grid> Grids { get; set; }
        public string Rarity { get; set; }

        public int ExtraSizeLeft { get; set; }
        public int ExtraSizeRight { get; set; }
        public int ExtraSizeUp { get; set; }
        public int ExtraSizeDown { get; set; }
        public int Width { get; set; }
        public int Height { get; set; }
        public int? StackMinRandom { get; set; }
        public int? StackMaxRandom { get; set; }

        public List<Chamber> Chambers { get; set; }
        public List<Slot> Slots { get; set; }
        public string defAmmo { get; set; }
    }

    public class Grid
    {
        public GridProps _props { get; set; }
    }

    public class GridProps
    {
        public int cellsH { get; set; }
        public int cellsV { get; set; }
        public int minCount{ get; set; }
        public int maxCount { get; set; }
        public List<GridFilter> filters {get;set;}
    }

    public class GridFilter
    {

    }

    public class Chamber
    {
        public string _name { get; set; }
        public string _id { get; set; }
        public string _parent { get; set; }
        public ChamberProps _props { get; set; }
        public bool _required { get; set; }
        public bool _mergeSlotWithChildren { get; set; }
        public string _proto { get; set; }
    }

    public class Slot
    {
        public string _name { get; set; }
        public bool _required { get; set; }
    }

    public class ChamberProps
    {
        public List<Filter> filters { get; set; }
    }

    public class Filter
    {
        public List<string> filter { get; set; }
    }
}