using System;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using Data.Models.Client.Stats.Reference;
using Data.Models.Server;
using Stats.Models;

namespace Data.Models.Client.Stats
{
    public class EFClientHitStatistic : AuditFields
    {
        [Key] 
        public int ClientHitStatisticId { get; set; }

        [Required] 
        public int ClientId { get; set; }

        [ForeignKey(nameof(ClientId))]
        public virtual EFClient Client { get; set; }
        
        public long? ServerId { get; set; }
        
        [ForeignKey(nameof(ServerId))]
        public virtual EFServer Server { get; set; }

        public int? HitLocationId { get; set; }

        [ForeignKey(nameof(HitLocationId))] 
        public virtual EFHitLocation HitLocation { get; set; }
        
        public int? MeansOfDeathId { get; set; }
        
        [ForeignKey(nameof(MeansOfDeathId))]
        public virtual EFMeansOfDeath MeansOfDeath { get; set; }

        public int? WeaponId { get; set; }

        [ForeignKey(nameof(WeaponId))]
        public virtual EFWeapon Weapon { get; set; }

        public int? WeaponAttachmentComboId { get; set; }

        [ForeignKey(nameof(WeaponAttachmentComboId))]
        public virtual EFWeaponAttachmentCombo WeaponAttachmentCombo { get; set; }

        /// <summary>
        /// how many hits the player got
        /// </summary>
        public int HitCount { get; set; }

        /// <summary>
        /// how many kills the player got
        /// </summary>
        public int KillCount { get; set; }

        /// <summary>
        /// how much damage the player inflicted
        /// </summary>
        public int DamageInflicted { get; set; }

        /// <summary>
        /// how many hits the player received
        /// </summary>
        public int ReceivedHitCount { get; set; }

        /// <summary>
        /// how many kills the player received
        /// </summary>
        public int DeathCount { get; set; }

        /// <summary>
        /// how much damage the player received
        /// </summary>
        public int DamageReceived { get; set; }

        /// <summary>
        /// how many times the player killed themself 
        /// </summary>
        public int SuicideCount { get; set; }

        /// <summary>
        /// estimation of time spent with the configuration
        /// </summary>
        public int? UsageSeconds { get; set; }
        
        /// <summary>
        /// total in-game score
        /// </summary>
        public int? Score { get; set; }
    }
}