#pragma once
#include "ICharacter.h"

/**
 * @brief 战士职业
 * 
 * 技术点: 多态 (Polymorphism) - 继承和方法重写
 * 特点: 高生命值、高防御、物理攻击
 */
class Warrior : public ICharacter {
private:
    int m_rage;      // 怒气值 (战士特有资源)
    int m_maxRage;   // 最大怒气值

public:
    /**
     * @brief 构造函数
     * @param name 角色名称
     * @param level 等级
     */
    Warrior(const std::string& name, int level = 1);

    /**
     * @brief 析构函数
     */
    virtual ~Warrior() {}

    /**
     * @brief 受到伤害 (重写) - 战士有格挡机制
     */
    virtual void takeDamage(int damage) override;

    /**
     * @brief 治疗 (重写)
     */
    virtual void heal(int amount) override;

    /**
     * @brief 获取怒气值
     */
    int getRage() const { return m_rage; }

    /**
     * @brief 增加怒气值
     */
    void addRage(int amount);

    /**
     * @brief 消耗怒气值
     */
    bool consumeRage(int amount);
};

/**
 * @brief 法师职业
 * 
 * 技术点: 多态 (Polymorphism) - 继承和方法重写
 * 特点: 高魔法值、魔法攻击、低防御
 */
class Mage : public ICharacter {
private:
    int m_shield;    // 法力护盾
    int m_maxShield; // 最大护盾值

public:
    /**
     * @brief 构造函数
     * @param name 角色名称
     * @param level 等级
     */
    Mage(const std::string& name, int level = 1);

    /**
     * @brief 析构函数
     */
    virtual ~Mage() {}

    /**
     * @brief 受到伤害 (重写) - 法师有法力护盾机制
     */
    virtual void takeDamage(int damage) override;

    /**
     * @brief 治疗 (重写)
     */
    virtual void heal(int amount) override;

    /**
     * @brief 获取护盾值
     */
    int getShield() const { return m_shield; }

    /**
     * @brief 添加护盾
     */
    void addShield(int amount);

    /**
     * @brief 重置护盾
     */
    void resetShield();
};
