import { ButtonBuilder } from "discord.js";
import ButtonAction from "../Types/ButtonAction";
import ButtonSwitch from "../Types/ButtonSwitch";
import ButtonData from "./ButtonData";
/**
 * Class that wraps button's functionality.
 */
export default class ButtonWrapper {
    private _data;
    private _action;
    private _switch;
    /**
     * Class that wraps button's functionality.
     * @param {Partila<ButtonData> | ButtonWrapper} data Either an interface for button styling or the class to be built from.
     */
    constructor(data?: Partial<ButtonData> | ButtonWrapper);
    /**
     * @returns {Partial<ButtonData>} Button's styling.
     */
    get data(): Partial<ButtonData>;
    /**
     * @returns {ButtonACtion} Action that is called after the button is pressed.
     */
    get action(): ButtonAction;
    /**
     * @returns {ButtonSwitch} Action that is called to switch button's state.
     */
    get switch(): ButtonSwitch;
    /**
     * @returns {ButtonBuilder} Ready button builder.
     */
    get builtComponent(): ButtonBuilder;
    /**
     * Sets buttons data.
     * @param {Partial<ButtonData> | ButtonWrapper} data Either an interface for button styling or the class to be built from.
     * @returns {this}
     */
    setData(data: Partial<ButtonData> | ButtonWrapper): this;
    /**
     * Sets action that is called after the button is pressed.
     * @param {ButtonAction} action Action that is called after the button is pressed.
     * @returns {this}
     */
    setAction(action: ButtonAction): this;
    /**
     * Sets action that is called to switch button's state.
     * @param switchFunction Action that is called to switch button's state.
     * @returns {this}
     */
    setSwitch(switchFunction: ButtonSwitch): this;
    /**
     * Converts button styling to JSON-like object.
     * @returns {ButtonData} JSON-like object.
     */
    toJSON(): ButtonData;
}
