#pragma once
#include "workq.h"
#include <memory>

class GlobalThreadPool {
  std::unique_ptr<DeadlineWorkQ> workq;
  std::unique_ptr<DeadlineThreadPool> pool;

  static GlobalThreadPool instance;
  GlobalThreadPool();

public:
  GlobalThreadPool(const GlobalThreadPool &) = delete;
  GlobalThreadPool &operator=(const GlobalThreadPool &) = delete;
  GlobalThreadPool(GlobalThreadPool &&) = delete;
  GlobalThreadPool &operator=(GlobalThreadPool &&) = delete;

  static DeadlineWorkQ::Future submit(std::function<void()> &&f,
                                      size_t deadline);

  static DeadlineWorkQ &getWorkQ();
};