import { BaseModule } from '../core/BaseModule';
import { CreateTribeParams, UpdateTribeParams, UpdateTribeConfigParams, JoinTribeParams, RequestToJoinTribeParams, JoinTribeWithCodeParams, ManageMemberParams, CreateInviteCodeParams, TribeDetails, MemberStatus } from '../types/tribes';
/**
 * Module for managing tribes and tribe membership
 */
export declare class TribesModule extends BaseModule {
    /**
     * Get the TribeController contract
     * @param useSigner Whether to use the signer
     */
    private getTribeControllerContract;
    /**
     * Create a new tribe
     * @param params Tribe creation parameters
     * @returns Tribe ID of the newly created tribe
     */
    createTribe(params: CreateTribeParams): Promise<number>;
    /**
     * Update tribe configuration
     * @param params Tribe configuration update parameters
     * @returns Transaction hash
     */
    updateTribeConfig(params: UpdateTribeConfigParams): Promise<string>;
    /**
     * Update tribe metadata and whitelist
     * @param params Tribe update parameters
     * @returns Transaction hash
     */
    updateTribe(params: UpdateTribeParams): Promise<string>;
    /**
     * Join a tribe
     * @param params Join tribe parameters
     * @returns Transaction hash
     */
    joinTribe(params: JoinTribeParams): Promise<string>;
    /**
     * Request to join a private tribe
     * @param params Request to join parameters
     * @returns Transaction hash
     */
    requestToJoinTribe(params: RequestToJoinTribeParams): Promise<string>;
    /**
     * Join a tribe using an invite code
     * @param params Join with code parameters
     * @returns Transaction hash
     */
    joinTribeWithCode(params: JoinTribeWithCodeParams): Promise<string>;
    /**
     * Approve a member's request to join
     * @param params Manage member parameters
     * @returns Transaction hash
     */
    approveMember(params: ManageMemberParams): Promise<string>;
    /**
     * Remove a member from a tribe
     * @param params Manage member parameters
     * @returns Transaction hash
     */
    removeMember(params: ManageMemberParams): Promise<string>;
    /**
     * Ban a member from a tribe
     * @param params Manage member parameters
     * @returns Transaction hash
     */
    banMember(params: ManageMemberParams): Promise<string>;
    /**
     * Create an invite code for a tribe
     * @param params Create invite code parameters
     * @returns Transaction hash
     */
    createInviteCode(params: CreateInviteCodeParams): Promise<string>;
    /**
     * Get tribe details
     * @param tribeId Tribe ID
     * @returns Tribe details object
     */
    getTribeDetails(tribeId: number): Promise<TribeDetails>;
    /**
     * Check if an address is a member of a tribe
     * @param tribeId Tribe ID
     * @param address Address to check
     * @returns Member status
     */
    getMemberStatus(tribeId: number, address: string): Promise<MemberStatus>;
    /**
     * Get all members of a tribe
     * @param tribeId Tribe ID
     * @returns Array of member addresses
     */
    getMembers(tribeId: number): Promise<string[]>;
    /**
     * Get all tribes a user is a member of
     * @param address User address
     * @returns Array of tribe IDs
     */
    getUserTribes(address: string): Promise<number[]>;
    /**
     * Check if an invite code is valid
     * @param tribeId Tribe ID
     * @param code Invite code
     * @returns True if the code is valid
     */
    isInviteCodeValid(tribeId: number, code: string): Promise<boolean>;
    /**
     * Get all tribes with pagination
     * @param offset The starting index for pagination
     * @param limit The maximum number of tribes to return
     * @returns Object containing tribe IDs and total count
     */
    getAllTribes(offset?: number, limit?: number): Promise<{
        tribeIds: number[];
        total: number;
    }>;
    /**
     * Check if a tribe exists
     * @param tribeId Tribe ID to check
     * @returns True if the tribe exists
     */
    tribeExists(tribeId: number): Promise<boolean>;
    /**
     * Get the total number of tribes
     * @returns Total number of tribes
     */
    getTribeCount(): Promise<number>;
    /**
     * Check if a user is an active member of a tribe
     * @param tribeId Tribe ID
     * @param address User address
     * @returns True if the user is an active member
     */
    isActiveMember(tribeId: number, address: string): Promise<boolean>;
    /**
     * Find the first tribe the user is a member of, useful for testing
     * @param address User address
     * @returns Tribe ID of the first tribe the user is a member of, or 0 if none
     */
    findFirstActiveTribe(address: string): Promise<number>;
    /**
     * Check if a user can post in a tribe
     * @param tribeId Tribe ID
     * @param address User address
     * @returns True if the user can post in the tribe
     */
    canPostInTribe(tribeId: number, address: string): Promise<boolean>;
}
