import { TextTicket } from "./TextTicket";
import { BaseManager } from "../Base/BaseManager";
/**
 * @external CategoryChannel
 * @see {@link https://discord.js.org/#/docs/main/stable/class/CategoryChannel}
 */
/**
 * @external Client
 * @see {@link https://discord.js.org/#/docs/main/stable/class/Client}
 */
/**
 * @external Collection
 * @see {@link https://discord.js.org/#/docs/collection/stable/class/Collection}
 */
/**
 * @external Guild
 * @see {@link https://discord.js.org/#/docs/main/stable/class/Guild}
 */
/**
 * @external GuildMember
 * @see {@link https://discord.js.org/#/docs/main/stable/class/GuildMember}
 */
/**
 * @external Permissions
 * @see {@link https://discord.js.org/#/docs/main/stable/class/Permissions}
 */
import { Client, Collection, Guild, GuildMember } from "discord.js";
import { TicketManagerOptions, TicketManagerEvents } from "../types/types";
/**
 * Text Ticket Manager
 * @extends {BaseManager}
 */
export declare class TicketManager extends BaseManager {
    readonly client: Client;
    options: TicketManagerOptions;
    tickets: Collection<string, TextTicket>;
    /**
     * @param {Client} client Discord Client
     * @param {TicketManagerOptions} [options] TicketManager options
     */
    constructor(client: Client, options?: TicketManagerOptions);
    /**
     * Caching raws tickets into Array
     * @return {Promise<void>}
     * @private
     */
    cachingTickets(): Promise<void>;
    on<U extends keyof TicketManagerEvents>(event: U, listener: TicketManagerEvents[U]): this;
    emit<U extends keyof TicketManagerEvents>(event: U, ...args: Parameters<TicketManagerEvents[U]>): boolean;
    /**
     * Get options
     * @private
     * @param {string} id
     * @return {TicketManagerOptions}
     */
    getOptions(id: string): Promise<TicketManagerOptions>;
    /**
     * Create Ticket
     * @param {Guild} guild Discord Guild
     * @param {GuildMember} member Discord Guild Member
     * @return {Promise<TextTicket>}
     * @example
     * //Create Thread Ticket
     * await ticketText.createTicket(message.guild, message.member)
     */
    createTicket(guild: Guild, member: GuildMember): Promise<TextTicket | undefined>;
    /**
     * Delete Ticket
     * @param {TextTicket} ticket Ticket class
     * @return {Promise<any>}
     */
    deleteTicket(ticket: TextTicket): Promise<any>;
    /**
     * Close Ticket
     * @param {TextTicket} ticket Ticket class
     * @return {Promise<any>}
     */
    closeTicket(ticket: TextTicket): Promise<any>;
    /**
     * ReOpen ticket
     * @param {TextTicket} ticket Ticket Resolvable
     * @return {Promise<any>}
     */
    reOpenTicket(ticket: TextTicket): Promise<any>;
    /**
     * Rename Ticket
     * @param {ThreadTicket} ticket ThreadTicket
     * @param {string} name new Name
     * @return {Promise<any>}
     */
    renameTicket(ticket: TextTicket, name: string): Promise<any>;
}
/**
 * Text Ticket Manager Config Types
 * @typedef {object} TicketManagerOptions
 * @property {boolean} enabled Manager status
 * @property {string} parentID Category Id where are created tickets
 * @property {string} staffRole Discord Role id who can access to tickets
 * @property {string} closedParentID Category Id where are closed tickets
 * @property {string} [channelTopic] Ticket's channel topic
 * @property {boolean} ticketCache Storing tickets in the cache
 * @property {StorageType} storage Storage File path
 */ 
