#pragma once

#include <utility>
#include <QtCore/QUuid>

namespace QtNodes
{
    enum class PortType
    {
        None,
        In,
        Out
    };

    static const int INVALID = -1;

    using PortIndex = int;

    struct Port
    {
        PortType  type;
        PortIndex index;

        Port()
            : type(PortType::None)
            , index(INVALID)
        {}

        Port(PortType t, PortIndex i)
            : type(t)
            , index(i)
        {}

        // is index valid
        bool indexIsValid() { return index != INVALID; }

        // is port valid
        bool portTypeIsValid() { return type != PortType::None; }
    };

    // using PortAddress = std::pair<QUuid, PortIndex>;
    inline PortType oppositePort(PortType port)
    {
        PortType result = PortType::None;
        switch (port)
        {
            case PortType::In: result = PortType::Out; break;
            case PortType::Out: result = PortType::In; break;
            default: break;
        }

        return result;
    }
}
