using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace SessionCompanion.Database.Tables
{
    public class Monster : BaseEntity
    {
        /// <summary>
        /// Nazwa potwora
        /// </summary>
        public string Name { get; set; }

        /// <summary>
        /// Rozmiar potwora
        /// </summary>
        public string Size { get; set; }

        /// <summary>
        /// Rodzaj potwora
        /// </summary>
        public string Type { get; set; }

        /// <summary>
        /// Podtyp potwora
        /// </summary>
        public string Subtype { get; set; }

        /// <summary>
        /// Charakter potwora
        /// </summary>
        public string Alignment { get; set; }

        /// <summary>
        /// Poziom pancerza potwora
        /// </summary>
        public int ArmorClass { get; set; }

        /// <summary>
        /// Iloś punktów zycia potwora
        /// </summary>
        public int HitPoints { get; set; }

        /// <summary>
        /// Ilość kości określajacych punkty życia potwora
        /// </summary>
        public int HitDiceAmount { get; set; }

        /// <summary>
        /// Kość którą rzucamy aby określić punkty życia potwora
        /// </summary>
        public int HitDiceType { get; set; }

        /// <summary>
        /// Szybkość chodzenia potwora
        /// </summary>
        public string WalkSpeed { get; set; }

        /// <summary>
        /// Szybkość pływania potwora
        /// </summary>
        public string SwimSpeed { get; set; }

        /// <summary>
        /// Szybkość latania potwora
        /// </summary>
        public string FlySpeed { get; set; }

        /// <summary> 
        /// Punkty zręczności potwora
        /// </summary>
        public int Dexterity { get; set; }
        public int? DexteritySave { get; set; }

        /// <summary>
        /// Punkty siły potwora
        /// </summary>
        public int Strength { get; set; }
        public int? StrengthSave { get; set; }

        /// <summary>
        /// Punkty kondycji potwora
        /// </summary>
        public int Constitution { get; set; }
        public int? ConstitutionSave { get; set; }

        /// <summary>
        /// Punkty inteligencji potwora
        /// </summary>
        public int Intelligence { get; set; }
        public int? IntelligenceSave { get; set; }

        /// <summary>
        /// Punkty mądrości potwora
        /// </summary>
        public int Wisdom { get; set; }
        public int? WisdomSave { get; set; }

        /// <summary>
        /// Punkty charyzmy potwora
        /// </summary>
        public int Charisma { get; set; }
        public int? CharismaSave { get; set; }

        /// <summary>
        /// Poziom trudności potwora
        /// </summary>
        public int ChallengeRating { get; set; }

        /// <summary>
        /// Punkty doświadczenia za zabicie potwora
        /// </summary>
        public int ExperiencePoints { get; set; }

        /// <summary>
        /// Połączenie z tabelą MonsterActions
        /// </summary>
        public virtual ICollection<MonsterAction> MonsterAction { get; set; }

        /// <summary>
        /// Na jakie stany odporny jest potwor
        /// </summary>
        public string MonsterConditionImmunities { get; set; }

        /// <summary>
        /// Na jakie obrazenia odporny jest potwor
        /// </summary>
        public string MonsterDamageImmunities { get; set; }

        /// <summary>
        /// Na jakie obrazenia potwor ma zmniejszoną słabosc
        /// </summary>
        public string MonsterDamageResistances { get; set; }

        /// <summary>
        /// Na co potwor jest wrazliwy
        /// </summary>
        public string MonsterDamageVulnerabilities { get; set; }

        /// <summary>
        /// Jezyki jakimi wlada potwor
        /// </summary>
        public string MonsterLanguages { get; set; }

        /// <summary>
        /// Połączenie z tabelą MonsterLegendaryActions
        /// </summary>
        public virtual ICollection<MonsterLegendaryAction> MonsterLegendaryAction { get; set; }

        /// <summary>
        /// Połączenie z tabelą MonsterSenses
        /// </summary>
        public string MonsterSenses { get; set; }

        /// <summary>
        /// Połączenie z tabelą MonsterSpecialAbilities
        /// </summary>
        public virtual ICollection<MonsterSpecialAbility> MonsterSpecialAbility { get; set; }
    }
}