#ifndef DEVICE_H
#define DEVICE_H

#include <string>
#include <vector>
#include <memory>
#include <sstream>
#include <user/deviceAttachmentSpec.h>
#include <deviceManager/deviceRole.h>
#include <spinscale/qutex.h>

namespace smo {
namespace device {

class Device
{
public:
    Device(const std::string& identifier)
	: deviceIdentifier(identifier), qutex("Device-" + identifier)
	{}

    std::string stringify() const
    {
        std::ostringstream os;
        os << "Device Identifier: " << deviceIdentifier
           << ", Device Roles: " << deviceRoles.size() << std::endl;
        for (const auto& deviceRole : deviceRoles) {
            os << "  " << deviceRole->deviceAttachmentSpec->stringify();
        }
        return os.str();
    }

public:
	std::string deviceIdentifier;
	std::vector<std::shared_ptr<DeviceRole>> deviceRoles;
	sscl::Qutex qutex;
};

} // namespace device
} // namespace smo

#endif // DEVICE_H
