/********************************************************************
* CONFIDENTIAL - All source code is the propriety and confidential  *
* information of David Sorber.                                      *
*                                                                   *
* Copyright 2024 David Sorber                                       *
* Unpublished -- all rights reserved under the copyright laws       *
* of the United States.                                             *
********************************************************************/

#ifndef __COPYTOOL_COPYMANAGEROPTIONS_H_
#define __COPYTOOL_COPYMANAGEROPTIONS_H_

#include <cstdint>
#include <map>
#include <string>

namespace DBS
{

class CopyManagerOptions
{
public:

    static const uint32_t LOG_LEVEL_DEFAULT{3};
    static const uint32_t FC_THRESHOLD_DEFAULT{1000};
    static const uint32_t NUM_PROC_THREADS_DEFAULT{4};

    CopyManagerOptions(
        const char* srcPath,
        const char* destPath);

    CopyManagerOptions(
        const std::string srcPath,
        const std::string destPath);

    ~CopyManagerOptions();

    //--- Getters -------------------------------------------------------------
    inline const std::string& getSrcPath() const
    {
        return m_srcPath;
    }

    inline const std::string& getDestPath() const
    {
        return m_destPath;
    }

    inline uint32_t getLogLevel() const
    {
        return m_logLevel;
    }

    inline uint32_t getFlowControlThreshold() const
    {
        return m_flowControlThreshold;
    }

    inline uint32_t getNumProcThreads() const
    {
        return m_numProcThreads;
    }

    //--- Setters -------------------------------------------------------------
    inline void setFlowControlThreshold(uint32_t threshold)
    {
        m_flowControlThreshold = threshold;
    }

private:

    std::string m_srcPath;              // source path; "copy from"
    std::string m_destPath;             // destination path; "copy to"

    uint32_t m_logLevel;
    uint32_t m_flowControlThreshold;
    uint32_t m_numProcThreads;

};

} // namespace DBS


#endif //__COPYTOOL_COPYMANAGEROPTIONS_H_
