import type { Request } from 'express';
import { KanbanCustomer, CustomerStatus, UserStub } from './entities/kanban-customer.entity';
import { KanbanPipelineStage } from './entities/kanban-pipeline-stage.entity';
import { KanbanActivity } from './entities/kanban-activity.entity';
import { CreateCustomerDto, UpdateCustomerDto, MoveStageDto, AssignSaleDto, CustomerListQueryDto, ActivityListQueryDto } from './dto/kanban.dto';
import { BaseTenantService } from '@/common/base/service/base-crud.service';
import { TenantConnectionService } from '../tenant/tenant-connection.service';
export declare class KanbanCustomerService extends BaseTenantService<KanbanCustomer> {
    protected tenantConnectionService: TenantConnectionService;
    protected entity: typeof KanbanCustomer;
    constructor(tenantConnectionService: TenantConnectionService);
    private getRepo;
    getBoard(currentUserId?: number, isSuperAdmin?: boolean, search?: string, sourceId?: string, priority?: string, status?: string, tags?: string, fromDate?: string, toDate?: string, assignedSaleIds?: string, relatedSaleIds?: string): Promise<{
        stage: KanbanPipelineStage;
        customers: KanbanCustomer[];
        totalCount: number;
        totalValue: number;
    }[]>;
    findAllCustomer(req: any, query: CustomerListQueryDto, currentUserId?: number, isSuperAdmin?: boolean): Promise<{
        data: KanbanCustomer[];
        current_page: number;
        first_page_url: string;
        from: number | null;
        last_page: number;
        last_page_url: string;
        links: {
            url: string;
            label: string;
            active: boolean;
        }[];
        next_page_url: string | null;
        path: string;
        per_page: number;
        prev_page_url: string | null;
        to: number | null;
        total: number;
    }>;
    findById(id: string): Promise<KanbanCustomer>;
    findByIdWithActivities(id: string, activityQuery?: ActivityListQueryDto, req?: Request): Promise<{
        activities: {
            data: KanbanActivity[];
            current_page: number;
            per_page: number;
            from: number | null;
            to: number | null;
            total: number;
            last_page: number;
            first_page_url: string | null;
            last_page_url: string | null;
            next_page_url: string | null;
            prev_page_url: string | null;
            path: string | null;
            links: {
                url: string;
                label: string;
                active: boolean;
            }[];
        };
        id: string;
        fullName: string;
        email: string;
        phone: string;
        phone2: string;
        gender: import("./entities/kanban-customer.entity").CustomerGender;
        dateOfBirth: Date;
        address: string;
        city: string;
        province: string;
        country: string;
        company: string;
        jobTitle: string;
        industry: string;
        estimatedValue: number;
        currency: string;
        stageId: string;
        stage: KanbanPipelineStage;
        stageOrder: number;
        priority: import("./entities/kanban-customer.entity").CustomerPriority;
        status: CustomerStatus;
        assignedSaleId: number | null;
        assignedSale: UserStub;
        relatedSales: UserStub[];
        sourceId: string;
        source: import("./entities/kanban-lead-source.entity").KanbanLeadSource;
        sourceRef: string;
        rawData: Record<string, any>;
        tags: string;
        notes: string;
        expectedCloseDate: Date;
        lastContactedAt: Date;
        nextFollowUpAt: Date;
        contactCount: number;
        createdById: number;
        stageChangedAt: Date;
        stageChangedById: number;
        createdAt: Date;
        updatedAt: Date;
    }>;
    createCustomer(dto: CreateCustomerDto, createdById: number): Promise<KanbanCustomer>;
    updateCustomer(id: string, dto: UpdateCustomerDto): Promise<KanbanCustomer>;
    delete(id: string): Promise<void>;
    moveStage(id: string, dto: MoveStageDto, userId: number): Promise<KanbanCustomer>;
    assignSale(id: string, dto: AssignSaleDto, updatedById: number): Promise<KanbanCustomer>;
    bulkImport(rows: Partial<KanbanCustomer>[], sourceId: string, importedById: number | string): Promise<{
        imported: number;
        skipped: number;
        errors: any[];
    }>;
    statsByStage(currentUserId?: number, isSuperAdmin?: boolean, fromDate?: string, toDate?: string): Promise<any[]>;
    statsBySale(currentUserId?: number, isSuperAdmin?: boolean, fromDate?: string, toDate?: string): Promise<any[]>;
    private writeActivity;
}
