using SessionCompanion.Database.Tables;
using SessionCompanion.ViewModels.Enums;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace SessionCompanion.Database
{
    public static class SeedFromJsons
    {
        static public Weapon SingleWeaponSeeder(dynamic item)
        {
            Weapon weapon = new Weapon();

            // Id
            weapon.Id = item.index;

            // Name
            weapon.Name = item.name;

            // Weapon type
            weapon.WeaponType = item.category_range;

            // Cost
            weapon.Cost = item.cost.quantity;

            // CurrnecyType
            switch ((string)item.cost.unit)
            {
                case "sp":
                    weapon.CurrencyType = CurrencyType.sp;
                    break;
                case "gp":
                    weapon.CurrencyType = CurrencyType.gp;
                    break;
            }

            // DiceCount
            weapon.DiceCount = item.damage.dice_count;

            // DiceValue
            weapon.DiceValue = item.damage.dice_value;

            // RangeMeele
            weapon.RangeMeele = item.range.normal;

            // RangeLong
            weapon.RangeLong = item.range._long;

            // RangeThrow
            if (item.throw_range != null)
            {
                weapon.RangeThrowNormal = item.throw_range.normal;
                weapon.RangeThrowLong = item.throw_range._long;
            }

            // Weight
            weapon.Weight = item.weight;

            
            // Twohand
            if (item.two_hand_damage != null)
            {
                weapon.TwoHandDiceCount = item.two_hand_damage.dice_count;
                weapon.TwoHandDiceValue = item.two_hand_damage.dice_value;
            }
            if (item.special != null)
                weapon.Description = item.special[0];
            return weapon;
        }
        static public Armor SingleArmorSeeder(dynamic item, int id)
        {
            Armor armor = new Armor();

            armor.Id = id;
            armor.Name = item.name;
            armor.Category = item.armor_category;
            armor.ArmorClassBase = item.armor_class["base"];
            armor.HaveDexterityBonus = item.armor_class["dex_bonus"];
            armor.MinimumStrength = item.str_minimum;
            armor.HaveStealthDisadvantage = item.stealth_disadvantage;
            armor.Weight = item.weight;
            armor.Cost = item.cost.quantity;
            switch ((string)item.cost.unit)
            {
                case "sp":
                    armor.CurrencyType = CurrencyType.sp;
                    break;
                case "gp":
                    armor.CurrencyType = CurrencyType.gp;
                    break;
            }

            return armor;
        }
        static public OtherEquipment SingleOtherEquipmentSeeder(dynamic item, int id)
        {
            OtherEquipment otherEq = new OtherEquipment();

            otherEq.Id = id;
            otherEq.Name = item.name;
            if (item.desc != null)
                foreach (dynamic description in item.desc)
                    otherEq.Description += " " + description;
            else
                otherEq.Description = string.Empty;

            otherEq.Cost = item.cost.quantity;
            switch ((string)item.cost.unit)
            {
                case "sp":
                    otherEq.CurrencyType = CurrencyType.sp;
                    break;
                case "gp":
                    otherEq.CurrencyType = CurrencyType.gp;
                    break;
            }

            return otherEq;
        }
    }
}