/* Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
   file Copyright.txt or https://cmake.org/licensing for details.  */
#ifndef cmFileLockResult_h
#define cmFileLockResult_h

#include <cmConfigure.h> // IWYU pragma: keep

#include <string>

#if defined(_WIN32)
#include <windows.h> // DWORD
#endif

/**
  * @brief Result of the locking/unlocking file.
  * @note See @c cmFileLock
  */
class cmFileLockResult
{
public:
#if defined(_WIN32)
  typedef DWORD Error;
#else
  typedef int Error;
#endif

  /**
    * @brief Successful lock/unlock.
    */
  static cmFileLockResult MakeOk();

  /**
    * @brief Lock/Unlock failed. Read error/GetLastError.
    */
  static cmFileLockResult MakeSystem();

  /**
    * @brief Lock/Unlock failed. Timeout reached.
    */
  static cmFileLockResult MakeTimeout();

  /**
    * @brief File already locked.
    */
  static cmFileLockResult MakeAlreadyLocked();

  /**
    * @brief Internal error.
    */
  static cmFileLockResult MakeInternal();

  /**
    * @brief Try to lock with function guard outside of the function
    */
  static cmFileLockResult MakeNoFunction();

  bool IsOk() const;
  std::string GetOutputMessage() const;

private:
  enum ErrorType
  {
    OK,
    SYSTEM,
    TIMEOUT,
    ALREADY_LOCKED,
    INTERNAL,
    NO_FUNCTION
  };

  cmFileLockResult(ErrorType type, Error errorValue);

  ErrorType Type;
  Error ErrorValue;
};

#endif // cmFileLockResult_h
