#ifndef BACKEND_DB_H
#define BACKEND_DB_H

#include <utility>

#include <drogon/utils/coroutine.h>
#include <drogon/drogon.h>

#include "model/Inode.h"
#include "model/Tokens.h"
#include "model/User.h"

const std::string jwt_secret = "CUM";

namespace db {
    enum UserRole : int {
        ADMIN = 2,
        USER = 1,
        DISABLED = 0
    };

    enum tfaTypes : int {
        NONE = 0,
        EMAIL = 1,
        TOTP = 2
    };

    using INode = drogon_model::sqlite3::Inode;
    using Token = drogon_model::sqlite3::Tokens;
    using User = drogon_model::sqlite3::User;

    using MapperInode = drogon::orm::Mapper<INode>;
    using MapperToken = drogon::orm::Mapper<Token>;
    using MapperUser = drogon::orm::Mapper<User>;

    using Criteria = drogon::orm::Criteria;
    using CompareOps = drogon::orm::CompareOperator;

    UserRole User_getEnumRole(const User&) noexcept;
    tfaTypes User_getEnumTfaType(const User&) noexcept;
}

#endif //BACKEND_DB_H