#ifndef LINUX_UTILITY_UTILITY_H_
#define LINUX_UTILITY_UTILITY_H_

#include <cerrno>
#include <cstring>
#include <fsfw/serviceinterface/ServiceInterface.h>

#include <fcntl.h>
#include <unistd.h>

namespace utility {

void handleIoctlError(const char* const customPrintout);

class UnixFileHelper {
public:
    static constexpr int READ_WRITE_FLAG = O_RDWR;
    static constexpr int READ_ONLY_FLAG = O_RDONLY;
    static constexpr int NON_BLOCKING_IO_FLAG = O_NONBLOCK;

    static constexpr ReturnValue_t OPEN_FILE_FAILED = 1;

    UnixFileHelper(std::string device, int* fileDescriptor, int flags,
            std::string diagnosticPrefix = "");

    virtual~ UnixFileHelper();

    ReturnValue_t getOpenResult() const;
private:
    int* fileDescriptor = nullptr;
    ReturnValue_t openStatus = HasReturnvaluesIF::RETURN_OK;
};

}

#endif /* LINUX_UTILITY_UTILITY_H_ */