import type { Response } from 'express';
import { LeadService } from './services/lead.service';
import { CreateLeadDto } from './dto/create-lead.dto';
import { UpdateLeadDto } from './dto/update-lead.dto';
import { AssignLeadDto } from './dto/assign-lead.dto';
import { ListLeadsQueryDto, KanbanQueryDto, KanbanLoadMoreQueryDto } from './dto/list-leads.dto';
import { BulkUpdateLeadDto, BulkDestroyLeadDto } from './dto/bulk-update-lead.dto';
import { CheckDuplicatesDto, RequestHandoverDto } from './dto/check-duplicates.dto';
export declare class LeadController {
    private readonly service;
    private readonly logger;
    constructor(service: LeadService);
    private getCurrentUser;
    list(q: ListLeadsQueryDto, req: Request): Promise<{
        data: import("./entities/lead.entity").Lead[];
        meta: {
            total: number;
            page: number;
            limit: number;
            totalPages: number;
        };
    }>;
    analytics(req: Request): Promise<{
        total: number;
        new_month: number;
        converted: number;
        lost: number;
        by_client_group: Record<string, number>;
    }>;
    clientGroups(): {
        options: {
            value: import("./entities/lead.entity").ClientGroup.QRS | import("./entities/lead.entity").ClientGroup.TQS | import("./entities/lead.entity").ClientGroup.QRS_NEW;
            label: string;
        }[];
        legacy_rollup: {
            QRS_B: import("./entities/lead.entity").ClientGroup;
        };
    };
    tags(): Promise<string[]>;
    kanban(q: KanbanQueryDto, req: Request): Promise<{
        columns: Record<string, import("./entities/lead.entity").Lead[]>;
        totals: Record<string, number>;
        stats: {
            total: number;
            new_month: number;
            converted: number;
            lost: number;
            by_client_group: Record<string, number>;
        };
    }>;
    kanbanLoadMore(q: KanbanLoadMoreQueryDto, req: Request): Promise<{
        cards: {
            id: number;
            lead_code: string;
            company: string;
            contact: string | null;
            client_group: import("./entities/lead.entity").ClientGroup | null;
            priority: import("./entities/lead.entity").LeadPriority;
            standards: string[];
            assignee: string | null;
            created_at: Date | null;
        }[];
        next_offset: number;
        remaining: number;
    }>;
    checkDuplicates(q: CheckDuplicatesDto): Promise<{
        matches: {
            id: number;
            lead_code: string;
            company: string;
            contact: string | null;
            email: string | null;
            phone: string | null;
            status: import("./entities/lead.entity").LeadStatus;
            reasons: import("./services/duplicate-lead-detector.service").DuplicateReason[];
            severity: "low" | "high";
            hard_signals: number;
            soft_signals: number;
        }[];
        client_matches: import("./services/duplicate-lead-detector.service").DuplicateClientMatch[];
    }>;
    importTemplate(res: Response): void;
    importLeads(file: Express.Multer.File, skipDuplicates: string | undefined, defaultAssignedTo: string | undefined, req: Request): Promise<{
        created: number;
        skipped: number;
        errors: string[];
    }>;
    findOne(id: number): Promise<import("./entities/lead.entity").Lead>;
    create(dto: CreateLeadDto, req: Request): Promise<import("./entities/lead.entity").Lead>;
    update(id: number, dto: UpdateLeadDto, req: Request): Promise<import("./entities/lead.entity").Lead>;
    assign(id: number, dto: AssignLeadDto, req: Request): Promise<{
        message: string;
        changed: boolean;
        lead?: undefined;
    } | {
        message: string;
        changed: boolean;
        lead: import("./entities/lead.entity").Lead;
    }>;
    remove(id: number, req: Request): Promise<{
        message: string;
        id: number;
    }>;
    requestHandover(id: number, dto: RequestHandoverDto, req: Request): Promise<{
        message: string;
        skipped: boolean;
    } | {
        message: string;
        skipped?: undefined;
    }>;
    bulkUpdate(dto: BulkUpdateLeadDto, req: Request): Promise<{
        message: string;
        count: number;
    }>;
    bulkDestroy(dto: BulkDestroyLeadDto, req: Request): Promise<{
        message: string;
        count: number;
    }>;
}
