#pragma once

#include <thread>

// This macro is used to validate that a code is executed from the expected
// thread. It's useful to detect unexpected race on data members.
#define CHECK_VALID_THREAD() \
    if (not isValidThread()) \
        JAMI_ERR() << "The calling thread " << getCurrentThread() \
                   << " is not the expected thread: " << threadId_;

namespace jami {
namespace upnp {

class UpnpThreadUtil
{
protected:
    std::thread::id getCurrentThread() const { return std::this_thread::get_id(); }

    bool isValidThread() const { return threadId_ == getCurrentThread(); }

    // Upnp context execution queue (same as manager's scheduler)
    // Helpers to run tasks on upnp context queue.
    static ScheduledExecutor* getScheduler() { return &Manager::instance().scheduler(); }
    template<typename Callback>
    static void runOnUpnpContextQueue(Callback&& cb)
    {
        getScheduler()->run([cb = std::forward<Callback>(cb)]() mutable { cb(); });
    }

    std::thread::id threadId_;
};

} // namespace upnp
} // namespace jami
