import { ObjectLiteral, Repository, DeepPartial, FindOptionsWhere, SelectQueryBuilder, FindOptionsOrder } from 'typeorm';
import { TenantConnectionService } from '@/modules/tenant/tenant-connection.service';
import { BaseService } from '@/common/base/service/base.service';
import type { Request } from 'express';
import { PaginationResult } from '@/common/interfaces/pagination-result.interface';
import { ChatMessage } from '@/modules/chat/entities/chat-message.entity';
import { Media } from '@/modules/media/entities/media.entity';
export declare abstract class BaseTenantService<T extends ObjectLiteral> extends BaseService<T> {
    protected readonly tenantConnectionService: TenantConnectionService;
    protected abstract entity: {
        new (): T;
    };
    constructor(tenantConnectionService: TenantConnectionService);
    getRepository(): Promise<Repository<T>>;
    getCustomRepository<E extends ObjectLiteral>(entity: {
        new (): E;
    }): Promise<Repository<E>>;
    getCustomRepositoryBySubdomain<E extends ObjectLiteral>(entity: {
        new (): E;
    }, subdomain: string): Promise<Repository<E>>;
    checkUnique(req: Request, entity: any, field: string, value: any): Promise<boolean>;
    findAll(): Promise<T[]>;
    findOne(id: string | number, relations?: string[]): Promise<T | null>;
    create(data: DeepPartial<T>): Promise<T>;
    createWithMeta(data: DeepPartial<T>, extra?: Partial<T>): Promise<T>;
    update(id: string | number, data: DeepPartial<T>): Promise<T>;
    remove(id: string | number): Promise<void>;
    deleteMany(ids: (number | string)[], repo?: Repository<T>): Promise<{
        success: boolean;
        deletedCount: number;
        ids: (string | number)[];
    }>;
    count(condition?: Partial<T>): Promise<number>;
    paginate(page: number | undefined, perPage: number | undefined, req: Request, filters?: FindOptionsWhere<T> | FindOptionsWhere<T>[], order?: FindOptionsOrder<T>, relations?: string[]): Promise<PaginationResult<T>>;
    paginateQB(qb: SelectQueryBuilder<T>, page: number | undefined, perPage: number | undefined, req: Request): Promise<PaginationResult<T>>;
    private buildPagination;
    paginateMessages(conversationId: string, page: number | undefined, perPage: number | undefined, req: Request, search?: string, order?: FindOptionsOrder<ChatMessage>, relations?: string[]): Promise<PaginationResult<ChatMessage>>;
    paginateWithQueryBuilder(page: number | undefined, perPage: number | undefined, req: Request, alias: string, buildQuery: (qb: SelectQueryBuilder<T>) => void | Promise<void>): Promise<PaginationResult<T>>;
    paginateMedia(page: number | undefined, perPage: number | undefined, req: Request, filters?: {
        parent_id?: number;
        trash?: string;
        search?: string;
        type?: string;
        userId?: number;
    }, relations?: string[]): Promise<PaginationResult<Media>>;
}
