#pragma once

#include "database/db.hpp"
#include "threading/thread.hpp"

class Thread;

class Cleaning
{

public:
    // How much sec is a cleaning_cycle in which cleaner will clean at most
    // once. Starts cleaner thread.
    Cleaning(ConcurrentMap<std::string, Db> &dbs, size_t cleaning_cycle);

    // Destroys this object after this thread joins cleaning thread.
    ~Cleaning();

private:
    ConcurrentMap<std::string, Db> &dbms;

    const size_t cleaning_cycle;

    std::vector<std::unique_ptr<Thread>> cleaners;

    // Should i continue cleaning.
    std::atomic<bool> cleaning = {true};
};