#pragma once

#include <memory>

#include <Battle/Action.h>

class BattleField;
class Ship;

class Player {
public:
    virtual ~Player() = default;
    virtual int attack(Ship& playerShip) = 0;
    virtual Ship& getShip() = 0;
    virtual const Ship& getShip() const = 0;

    Action::Status makeAction(const BattleField& battleField);

protected:
    virtual Ship* chooseEnemyShip(const BattleField& battleField) const = 0;
    virtual std::unique_ptr<Action> chooseAction(const BattleField& battleField) const = 0;
};
