// THIS FILE IS GENERATED - ANY EDITS WILL BE OVERWRITTEN

#pragma once

#include <Quotient/jobs/basejob.h>

namespace Quotient {

//! \brief Stop the requesting user participating in a particular room.
//!
//! This API stops a user participating in a particular room.
//!
//! If the user was already in the room, they will no longer be able to see
//! new events in the room. If the room requires an invite to join, they
//! will need to be re-invited before they can re-join.
//!
//! If the user was invited to the room, but had not joined, this call
//! serves to reject the invite.
//!
//! The user will still be allowed to retrieve history from the room which
//! they were previously allowed to see.
class QUOTIENT_API LeaveRoomJob : public BaseJob {
public:
    //! \param roomId
    //!   The room identifier to leave.
    //!
    //! \param reason
    //!   Optional reason to be included as the `reason` on the subsequent
    //!   membership event.
    explicit LeaveRoomJob(const QString& roomId, const QString& reason = {});
};

//! \brief Stop the requesting user remembering about a particular room.
//!
//! This API stops a user remembering about a particular room.
//!
//! In general, history is a first class citizen in Matrix. After this API
//! is called, however, a user will no longer be able to retrieve history
//! for this room. If all users on a homeserver forget a room, the room is
//! eligible for deletion from that homeserver.
//!
//! If the user is currently joined to the room, they must leave the room
//! before calling this API.
class QUOTIENT_API ForgetRoomJob : public BaseJob {
public:
    //! \param roomId
    //!   The room identifier to forget.
    explicit ForgetRoomJob(const QString& roomId);

    //! \brief Construct a URL without creating a full-fledged job object
    //!
    //! This function can be used when a URL for ForgetRoomJob
    //! is necessary but the job itself isn't.
    static QUrl makeRequestUrl(const HomeserverData& hsData, const QString& roomId);
};

} // namespace Quotient
