using Model.Entity.Types;

namespace Model.Entity.Parts;

public class EntityWeaponModel : IEntityPartInterface
{
    public int Id { get; set; } = 1;
    public int EntityModelId { get; set; }
    public virtual EntityModel EntityModel { get; set; }

    public int Range { get; set; } = 40;
    public int MinimumRange { get; set; } = 0;
    public float AttacksPerSecond { get; set; } = 0;
    public float SecondsBetweenAttacks { get; set; } = 0;

    public float Cooldown { get; set; } = 0;
    public float Charges { get; set; } = 0;

    public int Damage { get; set; } = 0;

    public string ComplexDamage { get; set; } = "deals 126 over 6 seconds";


    public bool HasSplash { get; set; }

    public int LightDamage { get; set; } = 0;
    public int MediumDamage { get; set; } = 0;
    public int HeavyDamage { get; set; } = 0;


    public int StructureDamageBonus { get; set; } = 0;
    public int EthericDamageBonus { get; set; } = 0;
    public string Targets { get; set; } = TargetType.All;
    public string Attack { get; set; } = AttackType.DPS;

    public float DamagePerSecond()
    {
        if (SecondsBetweenAttacks == 0) return Damage * AttacksPerSecond;

        return Damage / SecondsBetweenAttacks;
    }

    public float DamagePerSecondLight()
    {
        var damage = LightDamage != 0 ? LightDamage : Damage;

        if (SecondsBetweenAttacks == 0) return damage * AttacksPerSecond;

        return damage / SecondsBetweenAttacks;
    }

    public float DamagePerSecondMedium()
    {
        var damage = MediumDamage != 0 ? MediumDamage : Damage;

        if (SecondsBetweenAttacks == 0) return damage * AttacksPerSecond;

        return damage / SecondsBetweenAttacks;
    }

    public float DamagePerSecondHeavy()
    {
        var damage = HeavyDamage != 0 ? HeavyDamage : Damage;

        if (SecondsBetweenAttacks == 0) return damage * AttacksPerSecond;

        return damage / SecondsBetweenAttacks;
    }
}