// <auto-generated/>
// ReSharper disable All

namespace MyTelegram.Schema.Messages;

///<summary>
/// Answer an inline query, for bots only
/// <para>Possible errors</para>
/// Code Type Description
/// 400 ARTICLE_TITLE_EMPTY The title of the article is empty.
/// 400 AUDIO_CONTENT_URL_EMPTY The remote URL specified in the content field is empty.
/// 400 AUDIO_TITLE_EMPTY An empty audio title was provided.
/// 400 BUTTON_DATA_INVALID The data of one or more of the buttons you provided is invalid.
/// 400 BUTTON_TYPE_INVALID The type of one or more of the buttons you provided is invalid.
/// 400 BUTTON_URL_INVALID Button URL invalid.
/// 400 DOCUMENT_INVALID The specified document is invalid.
/// 400 FILE_CONTENT_TYPE_INVALID File content-type is invalid.
/// 400 FILE_TITLE_EMPTY An empty file title was specified.
/// 400 GIF_CONTENT_TYPE_INVALID GIF content-type invalid.
/// 400 MESSAGE_EMPTY The provided message is empty.
/// 400 MESSAGE_TOO_LONG The provided message is too long.
/// 400 NEXT_OFFSET_INVALID The specified offset is longer than 64 bytes.
/// 400 PHOTO_CONTENT_TYPE_INVALID Photo mime-type invalid.
/// 400 PHOTO_CONTENT_URL_EMPTY Photo URL invalid.
/// 400 PHOTO_INVALID Photo invalid.
/// 400 PHOTO_THUMB_URL_EMPTY Photo thumbnail URL is empty.
/// 400 QUERY_ID_INVALID The query ID is invalid.
/// 400 REPLY_MARKUP_INVALID The provided reply markup is invalid.
/// 400 RESULTS_TOO_MUCH Too many results were provided.
/// 400 RESULT_ID_DUPLICATE You provided a duplicate result ID.
/// 400 RESULT_ID_INVALID One of the specified result IDs is invalid.
/// 400 RESULT_TYPE_INVALID Result type invalid.
/// 400 SEND_MESSAGE_MEDIA_INVALID Invalid media provided.
/// 400 SEND_MESSAGE_TYPE_INVALID The message type is invalid.
/// 400 START_PARAM_EMPTY The start parameter is empty.
/// 400 START_PARAM_INVALID Start parameter invalid.
/// 400 STICKER_DOCUMENT_INVALID The specified sticker document is invalid.
/// 400 SWITCH_PM_TEXT_EMPTY The switch_pm.text field was empty.
/// 400 SWITCH_WEBVIEW_URL_INVALID The URL specified in switch_webview.url is invalid!
/// 400 URL_INVALID Invalid URL provided.
/// 403 USER_BOT_INVALID User accounts must provide the <code>bot</code> method parameter when calling this method. If there is no such method parameter, this method can only be invoked by bot accounts.
/// 400 USER_BOT_REQUIRED This method can only be called by a bot.
/// 400 VIDEO_TITLE_EMPTY The specified video title is empty.
/// 400 WEBDOCUMENT_INVALID Invalid webdocument URL provided.
/// 400 WEBDOCUMENT_MIME_INVALID Invalid webdocument mime type provided.
/// 400 WEBDOCUMENT_SIZE_TOO_BIG Webdocument is too big!
/// 400 WEBDOCUMENT_URL_INVALID The specified webdocument URL is invalid.
/// See <a href="https://corefork.telegram.org/method/messages.setInlineBotResults" />
///</summary>
[TlObject(0xbb12a419)]
public sealed class RequestSetInlineBotResults : IRequest<IBool>
{
    public uint ConstructorId => 0xbb12a419;
    ///<summary>
    /// Flags, see <a href="https://corefork.telegram.org/mtproto/TL-combinators#conditional-fields">TL conditional fields</a>
    ///</summary>
    public int Flags { get; set; }

    ///<summary>
    /// Set this flag if the results are composed of media files
    /// See <a href="https://corefork.telegram.org/type/true" />
    ///</summary>
    public bool Gallery { get; set; }

    ///<summary>
    /// Set this flag if results may be cached on the server side only for the user that sent the query. By default, results may be returned to any user who sends the same query
    /// See <a href="https://corefork.telegram.org/type/true" />
    ///</summary>
    public bool Private { get; set; }

    ///<summary>
    /// Unique identifier for the answered query
    ///</summary>
    public long QueryId { get; set; }

    ///<summary>
    /// Vector of results for the inline query
    ///</summary>
    public TVector<MyTelegram.Schema.IInputBotInlineResult> Results { get; set; }

    ///<summary>
    /// The maximum amount of time in seconds that the result of the inline query may be cached on the server. Defaults to 300.
    ///</summary>
    public int CacheTime { get; set; }

    ///<summary>
    /// Pass the offset that a client should send in the next query with the same text to receive more results. Pass an empty string if there are no more results or if you don't support pagination. Offset length can't exceed 64 bytes.
    ///</summary>
    public string? NextOffset { get; set; }

    ///<summary>
    /// If passed, clients will display a button on top of the remaining inline result list with the specified text, that switches the user to a private chat with the bot and sends the bot a start message with a certain parameter.
    /// See <a href="https://corefork.telegram.org/type/InlineBotSwitchPM" />
    ///</summary>
    public MyTelegram.Schema.IInlineBotSwitchPM? SwitchPm { get; set; }

    ///<summary>
    /// If passed, clients will display a button on top of the remaining inline result list with the specified text, that switches the user to the specified <a href="https://corefork.telegram.org/api/bots/webapps#inline-mode-mini-apps">inline mode mini app</a>.
    /// See <a href="https://corefork.telegram.org/type/InlineBotWebView" />
    ///</summary>
    public MyTelegram.Schema.IInlineBotWebView? SwitchWebview { get; set; }

    public void ComputeFlag()
    {
        if (Gallery) { Flags = Flags.SetBit(0); }
        if (Private) { Flags = Flags.SetBit(1); }
        if (NextOffset != null) { Flags = Flags.SetBit(2); }
        if (SwitchPm != null) { Flags = Flags.SetBit(3); }
        if (SwitchWebview != null) { Flags = Flags.SetBit(4); }
    }

    public void Serialize(IBufferWriter<byte> writer)
    {
        ComputeFlag();
        writer.Write(ConstructorId);
        writer.Write(Flags);
        writer.Write(QueryId);
        writer.Write(Results);
        writer.Write(CacheTime);
        if (Flags.IsBitSet(2)) { writer.Write(NextOffset); }
        if (Flags.IsBitSet(3)) { writer.Write(SwitchPm); }
        if (Flags.IsBitSet(4)) { writer.Write(SwitchWebview); }
    }

    public void Deserialize(ref ReadOnlyMemory<byte> buffer)
    {
        Flags = buffer.ReadInt32();
        if (Flags.IsBitSet(0)) { Gallery = true; }
        if (Flags.IsBitSet(1)) { Private = true; }
        QueryId = buffer.ReadInt64();
        Results = buffer.Read<TVector<MyTelegram.Schema.IInputBotInlineResult>>();
        CacheTime = buffer.ReadInt32();
        if (Flags.IsBitSet(2)) { NextOffset = buffer.ReadString(); }
        if (Flags.IsBitSet(3)) { SwitchPm = buffer.Read<MyTelegram.Schema.IInlineBotSwitchPM>(); }
        if (Flags.IsBitSet(4)) { SwitchWebview = buffer.Read<MyTelegram.Schema.IInlineBotWebView>(); }
    }
}
