import { BaseManager } from "../Base/BaseManager";
/**
 * @external ThreadChannel
 * @see {@link https://discord.js.org/#/docs/main/stable/class/ThreadChannel}
 */
/**
 * @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 TextChannel
 * @see {@link https://discord.js.org/#/docs/main/stable/class/TextChannel}
 */
/**
 * @external Role
 * @see {@link https://discord.js.org/#/docs/main/stable/class/Role}
 */
/**
 * @external Message
 * @see {@link https://discord.js.org/#/docs/main/stable/class/Message}
 */
import { Client, Collection, Guild, GuildMember } from "discord.js";
import { ThreadManagerOptions, ThreadManagerEvents } from "../types/types";
import { ThreadTicket } from "./ThreadTicket";
/**
 * Thread Ticket Manager
 * @extends {BaseManager}
 */
export declare class ThreadManager extends BaseManager {
    readonly client: Client;
    readonly options: ThreadManagerOptions;
    tickets: Collection<string, ThreadTicket>;
    constructor(client: Client, options?: ThreadManagerOptions);
    /**
     * Caching raws tickets into Array
     * @return {Promise<void>}
     * @private
     */
    cachingTickets(): Promise<void>;
    on<U extends keyof ThreadManagerEvents>(event: U, listener: ThreadManagerEvents[U]): this;
    emit<U extends keyof ThreadManagerEvents>(event: U, ...args: Parameters<ThreadManagerEvents[U]>): boolean;
    /**
     * Get options
     * @private
     * @param {string} id
     * @return {ThreadManagerOptions}
     */
    getOptions(id: string): Promise<ThreadManagerOptions>;
    /**
     * Create Ticket
     * @param {Guild} guild Discord Guild
     * @param {GuildMember} member Discord Guild Member
     * @return {Promise<TextTicket>}
     * @example
     * //Create Thread Ticket
     * await ticketThread.createTicket(message.guild, message.member)
     */
    createTicket(guild: Guild, member: GuildMember): Promise<ThreadTicket | undefined>;
    /**
     * Delete Ticket
     * @param {TextTicket} ticket Ticket class
     * @return {Promise<any>}
     */
    deleteTicket(ticket: ThreadTicket): Promise<any>;
    /**
     * Close Ticket
     * @param {TextTicket} ticket Ticket class
     * @return {Promise<any>}
     */
    closeTicket(ticket: ThreadTicket): Promise<any>;
    /**
     * ReOpen ticket
     * @param {TextTicket} ticket Ticket Resolvable
     * @return {Promise<any>}
     */
    reOpenTicket(ticket: ThreadTicket): Promise<any>;
    /**
     * Rename Ticket
     * @param {ThreadTicket} ticket ThreadTicket
     * @param {string} name new Name
     * @return {Promise<any>}
     */
    renameTicket(ticket: ThreadTicket, name: string): Promise<any>;
}
/**
 * Threads Ticket Manager Config Types
 * @typedef {object} ThreadManagerOptions
 * @property {boolean} enabled Manager status
 * @property {string} channelId Discord Channel Id where are created tickets
 * @property {string} staffRole Discord Role id who can access to tickets
 * @property {boolean} ticketCache Storing tickets in the cache
 * @property {StorageType} storage Storage File path
 */ 
