#pragma once
#include <iostream>
#include <fstream>
#include <sstream>
namespace slp
{
struct ConfigData
{
    std::string name;
    std::string type;
    std::string port;

    friend std::istream& operator>>(std::istream& str, ConfigData& data)
    {
        std::string line;
        constexpr auto DELIMITER = " ";
        size_t  delimtrPos = 0;
        size_t  delimtrPrevPos = 0;
        std::array<std::string, 3>tokens;
        std::getline(str, line);
        size_t count = 0;

        delimtrPos = line.find(DELIMITER, delimtrPrevPos);
        while (delimtrPos != std::string::npos)
        {
            tokens[count] = line.substr(delimtrPrevPos, (delimtrPos - delimtrPrevPos));
            delimtrPrevPos = delimtrPos + 1;

            delimtrPos = line.find(DELIMITER, delimtrPrevPos);
            if (delimtrPos == std::string::npos && delimtrPrevPos < line.length())
            {
                delimtrPos = line.length();
            }

            count++;
        }

        if (count > 2)
        {
            data.name = tokens[0];
            data.type = tokens[1];
            data.port = tokens[2];
        }
        else
        {
            str.setstate(std::ios::failbit);
        }
        return str;
    }

};
}
