#pragma once

#include <Core/DifficultLvlStrategy.h>
#include <Ship/Ship.h>

#include <memory>

class PrintVisitor;
class Time;

class ShipBuilder {
public:
    ShipBuilder();

    [[nodiscard]] std::unique_ptr<Ship> build();

    ShipBuilder& setTime(Time* time);
    ShipBuilder& setStrategy(std::unique_ptr<DifficultLvlStrategy<Ship, bool>> strategy);
    ShipBuilder& setName(const std::string& name);
    ShipBuilder& setCapacity(int capacity);
    ShipBuilder& setCrew(int crew);
    ShipBuilder& setVisitor(std::unique_ptr<PrintVisitor> visitor);
    ShipBuilder& setArmor(int armor);
    ShipBuilder& setDurability(int durability);

private:
    std::unique_ptr<Ship> _ship;
};
