// Path: src/com/cadiducho/minegram/api/inline/InlineKeyboardMarkup.java
// @ToString
// @Getter @Setter
// public class InlineKeyboardMarkup {
// 
//     /**
//      * Array of button rows, each represented by an Array of {@link InlineKeyboardButton} objects
//      */
//     private List<List<InlineKeyboardButton>> inline_keyboard;
// }
// 
// Path: src/com/cadiducho/minegram/api/inline/InlineQueryResult.java
// @ToString
// @Getter @Setter
// public abstract class InlineQueryResult {
//     
//     /**
//      * Type of the result
//      */
//     protected final String type;
// 
//     /**
//      * Unique identifier for this result, 1-64 Bytes
//      */
//     protected String id;
//     
//     /**
//      * Optional. Inline keyboard attached to the message
//      */
//     protected InlineKeyboardMarkup reply_markup;
//     
//     /**
//      * Optional. Content of the message to be sent instead of the file
//      */
//     protected InputMessageContent input_message_content;
// 
//     public InlineQueryResult(String type) {
//         this.type = type;
//         this.id = UUID.randomUUID().toString().replace("-", "") + UUID.randomUUID().toString().replace("-", "");
//     }
// 
// }
// 
// Path: src/com/cadiducho/minegram/api/payment/LabeledPrice.java
// @ToString
// @Getter @Setter
// public class LabeledPrice {
//     
//     /**
//      * Portion label
//      */
//     private String label;
//     
//     /**
//      * Price of the product in the smallest units of the currency (integer, not float/double).
//      * For example, for a price of US$ 1.45 pass amount = 145. See the exp parameter in https://core.telegram.org/bots/payments/currencies.json, it shows the number of digits past the decimal point for each currency (2 for the majority of currencies).
//      */
//     private Integer amount;
//     
// }
// 
// Path: src/com/cadiducho/minegram/api/payment/ShippingOption.java
// @ToString
// @Getter @Setter
// public class ShippingOption {
//     
//     /**
//      * Shipping option identifier
//      */
//     private String id;
//     
//     /**
//      * Option title
//      */
//     private String title;
//     
//     /**
//      * List of price portions
//      */
//     private List<LabeledPrice> prices;
//     
// }


import com.cadiducho.minegram.api.inline.InlineKeyboardMarkup;
import com.cadiducho.minegram.api.inline.InlineQueryResult;
import com.cadiducho.minegram.api.*;
import com.cadiducho.minegram.api.exception.*;
import com.cadiducho.minegram.api.payment.LabeledPrice;
import com.cadiducho.minegram.api.payment.ShippingOption;
import java.util.List;
import org.bukkit.plugin.Plugin;
     * @param reply_markup A JSON-serialized object for an inline keyboard. If empty, one 'Pay total price' button will be shown. If not empty, the first button must be a Pay button.
     * @return {@link Message}
     * @throws com.cadiducho.minegram.api.exception.TelegramException
     */
    public Message sendInvoice(Integer chat_id, String title, String description, String payload, String provider_token, String start_parameter, String currency,
                                    List<LabeledPrice> prices, String photo_url, Integer photo_size, Integer photo_width, Integer photo_height, Boolean need_name, Boolean need_phone_number,
                                    Boolean need_email, Boolean need_shipping_address, Boolean is_flexible, Boolean disable_notification, Integer reply_to_message_id, InlineKeyboardMarkup reply_markup) throws TelegramException;
    
    /**
     * If you sent an invoice requesting a shipping address and the parameter is_flexible was specified, the Bot API will send an Update with a shipping_query field to the bot. 
     * Use this method to reply to shipping queries.
     * On success, True is returned.
     * @param shipping_query_id Unique identifier for the query to be answered
     * @param ok Specify True if delivery to the specified address is possible and False if there are any problems (for example, if delivery to the specified address is not possible)
     * @return True on success
     * @throws TelegramException 
     */
    public Boolean answerShippingQuery(String shipping_query_id, Boolean ok) throws TelegramException;
    
    /**
     * If you sent an invoice requesting a shipping address and the parameter is_flexible was specified, the Bot API will send an Update with a shipping_query field to the bot. 
     * Use this method to reply to shipping queries.
     * On success, True is returned.
     * @param shipping_query_id Unique identifier for the query to be answered
     * @param ok Specify True if delivery to the specified address is possible and False if there are any problems (for example, if delivery to the specified address is not possible)
     * @param shipping_options Required if ok is True. A JSON-serialized array of available shipping options.
     * @param error_message Required if ok is False. Error message in human readable form that explains why it is impossible to complete the order (e.g. "Sorry, delivery to your desired address is unavailable'). Telegram will display this message to the user.
     * @return True on success
     * @throws TelegramException 
     */
// Path: src/com/cadiducho/minegram/api/inline/InlineKeyboardMarkup.java
// @ToString
// @Getter @Setter
// public class InlineKeyboardMarkup {
// 
//     /**
//      * Array of button rows, each represented by an Array of {@link InlineKeyboardButton} objects
//      */
//     private List<List<InlineKeyboardButton>> inline_keyboard;
// }
// 
// Path: src/com/cadiducho/minegram/api/inline/InlineQueryResult.java
// @ToString
// @Getter @Setter
// public abstract class InlineQueryResult {
//     
//     /**
//      * Type of the result
//      */
//     protected final String type;
// 
//     /**
//      * Unique identifier for this result, 1-64 Bytes
//      */
//     protected String id;
//     
//     /**
//      * Optional. Inline keyboard attached to the message
//      */
//     protected InlineKeyboardMarkup reply_markup;
//     
//     /**
//      * Optional. Content of the message to be sent instead of the file
//      */
//     protected InputMessageContent input_message_content;
// 
//     public InlineQueryResult(String type) {
//         this.type = type;
//         this.id = UUID.randomUUID().toString().replace("-", "") + UUID.randomUUID().toString().replace("-", "");
//     }
// 
// }
// 
// Path: src/com/cadiducho/minegram/api/payment/LabeledPrice.java
// @ToString
// @Getter @Setter
// public class LabeledPrice {
//     
//     /**
//      * Portion label
//      */
//     private String label;
//     
//     /**
//      * Price of the product in the smallest units of the currency (integer, not float/double).
//      * For example, for a price of US$ 1.45 pass amount = 145. See the exp parameter in https://core.telegram.org/bots/payments/currencies.json, it shows the number of digits past the decimal point for each currency (2 for the majority of currencies).
//      */
//     private Integer amount;
//     
// }
// 
// Path: src/com/cadiducho/minegram/api/payment/ShippingOption.java
// @ToString
// @Getter @Setter
// public class ShippingOption {
//     
//     /**
//      * Shipping option identifier
//      */
//     private String id;
//     
//     /**
//      * Option title
//      */
//     private String title;
//     
//     /**
//      * List of price portions
//      */
//     private List<LabeledPrice> prices;
//     
// }


// Path: src/com/cadiducho/minegram/BotAPI.java
import com.cadiducho.minegram.api.inline.InlineKeyboardMarkup;
import com.cadiducho.minegram.api.inline.InlineQueryResult;
import com.cadiducho.minegram.api.*;
import com.cadiducho.minegram.api.exception.*;
import com.cadiducho.minegram.api.payment.LabeledPrice;
import com.cadiducho.minegram.api.payment.ShippingOption;
import java.util.List;
import org.bukkit.plugin.Plugin;

     * @param reply_markup A JSON-serialized object for an inline keyboard. If empty, one 'Pay total price' button will be shown. If not empty, the first button must be a Pay button.
     * @return {@link Message}
     * @throws com.cadiducho.minegram.api.exception.TelegramException
     */
    public Message sendInvoice(Integer chat_id, String title, String description, String payload, String provider_token, String start_parameter, String currency,
                                    List<LabeledPrice> prices, String photo_url, Integer photo_size, Integer photo_width, Integer photo_height, Boolean need_name, Boolean need_phone_number,
                                    Boolean need_email, Boolean need_shipping_address, Boolean is_flexible, Boolean disable_notification, Integer reply_to_message_id, InlineKeyboardMarkup reply_markup) throws TelegramException;
    
    /**
     * If you sent an invoice requesting a shipping address and the parameter is_flexible was specified, the Bot API will send an Update with a shipping_query field to the bot. 
     * Use this method to reply to shipping queries.
     * On success, True is returned.
     * @param shipping_query_id Unique identifier for the query to be answered
     * @param ok Specify True if delivery to the specified address is possible and False if there are any problems (for example, if delivery to the specified address is not possible)
     * @return True on success
     * @throws TelegramException 
     */
    public Boolean answerShippingQuery(String shipping_query_id, Boolean ok) throws TelegramException;
    
    /**
     * If you sent an invoice requesting a shipping address and the parameter is_flexible was specified, the Bot API will send an Update with a shipping_query field to the bot. 
     * Use this method to reply to shipping queries.
     * On success, True is returned.
     * @param shipping_query_id Unique identifier for the query to be answered
     * @param ok Specify True if delivery to the specified address is possible and False if there are any problems (for example, if delivery to the specified address is not possible)
     * @param shipping_options Required if ok is True. A JSON-serialized array of available shipping options.
     * @param error_message Required if ok is False. Error message in human readable form that explains why it is impossible to complete the order (e.g. "Sorry, delivery to your desired address is unavailable'). Telegram will display this message to the user.
     * @return True on success
     * @throws TelegramException 
     */
    public Boolean answerShippingQuery(String shipping_query_id, Boolean ok, List<ShippingOption> shipping_options, String error_message) throws TelegramException;