package org.project.entity.enemies;

import org.project.entity.Entity;
import org.project.item.weapons.Weapon;

public abstract class Enemy implements Entity {
    protected Weapon weapon;
    private int hp;
    private int maxHP;
    private int mp;
    private int maxMP;

    public Enemy(int hp, int mp, Weapon weapon) {
        this.hp = hp;
        this.maxHP = hp;
        this.mp = mp;
        this.maxMP = mp;
        this.weapon = weapon;
    }

    @Override
    public void attack(Entity target) {
        if (target != null && isAlive()) {
            // اگر اسلحه داشت با دمیج اسلحه، در غیر این صورت با دمیج پایه ۱۰ ضربه می‌زند
            int damage = (weapon != null) ? weapon.getDamage() : 10;
            System.out.println("⚔️ " + getClass().getSimpleName() + " به شما حمله کرد و " + damage + " واحد آسیب زد!");
            target.takeDamage(damage);
        }
    }

    @Override
    public void defend() {
        System.out.println("🛡️ " + getClass().getSimpleName() + " حالت دفاعی گرفت.");
    }

    @Override
    public void takeDamage(int damage) {
        this.hp -= damage;
        if (this.hp < 0) {
            this.hp = 0;
        }
    }

    @Override
    public void heal(int health) {
        this.hp += health;
        if (this.hp > maxHP) {
            this.hp = maxHP;
        }
    }

    @Override
    public void fillMana(int mana) {
        this.mp += mana;
        if (this.mp > maxMP) {
            this.mp = maxMP;
        }
    }

    @Override
    public boolean isAlive() {
        return this.hp > 0;
    }

    // متد کمکی برای تنظیم مجدد خون (مخصوص قابلیت زنده شدن مجدد)
    protected void setHp(int hp) {
        this.hp = hp;
    }

    // گترهای الزامی
    public int getHp() { return hp; }
    @Override public int getMaxHP() { return maxHP; }
    public int getMp() { return mp; }
    @Override public int getMaxMP() { return maxMP; }
    public Weapon getWeapon() { return weapon; }
}