//
// Copyright © 2019 Arm Ltd. All rights reserved.
// SPDX-License-Identifier: MIT
//

#include "ProfilingConnectionFactory.hpp"

#include "FileOnlyProfilingConnection.hpp"
#include "ProfilingConnectionDumpToFileDecorator.hpp"
#include "SocketProfilingConnection.hpp"

namespace armnn
{

namespace profiling
{

std::unique_ptr<IProfilingConnection> ProfilingConnectionFactory::GetProfilingConnection(
    const Runtime::CreationOptions::ExternalProfilingOptions& options) const
{
    // Before proceed to create the IProfilingConnection, check if the file format is supported
    if (!(options.m_FileFormat == "binary"))
    {
        throw armnn::UnimplementedException("Unsupported profiling file format, only binary is supported");
    }

    // We can create 3 different types of IProfilingConnection.
    // 1: If no relevant options are specified then a SocketProfilingConnection is returned.
    // 2: If both incoming and outgoing capture files are specified then a SocketProfilingConnection decorated by a
    //    ProfilingConnectionDumpToFileDecorator is returned.
    // 3: If both incoming and outgoing capture files are specified and "file only" then a FileOnlyProfilingConnection
    //    decorated by a ProfilingConnectionDumpToFileDecorator is returned.
    if ((!options.m_IncomingCaptureFile.empty() || !options.m_OutgoingCaptureFile.empty()) && !options.m_FileOnly)
    {
        // This is type 2.
        return std::make_unique<ProfilingConnectionDumpToFileDecorator>(std::make_unique<SocketProfilingConnection>(),
                                                                        options);
    }
    else if ((!options.m_IncomingCaptureFile.empty() || !options.m_OutgoingCaptureFile.empty()) && options.m_FileOnly)
    {
        // This is type 3.
        return std::make_unique<ProfilingConnectionDumpToFileDecorator>(
            std::make_unique<FileOnlyProfilingConnection>(options), options);
    }
    else
    {
        // This is type 1.
        return std::make_unique<SocketProfilingConnection>();
    }
}

}    // namespace profiling

}    // namespace armnn
