import { Model } from "mongoose";
import { Response } from "express";
import { Types } from "mongoose";
import { CreateEstimationDto } from "./dto/estimation.dto";
import { EstimationDocument } from "src/schema/estimation.schema";
import { PdfService } from "src/pdf/pdf.service";
import { AttachmentService } from "src/attachment/attachment.service";
import { MailerService } from "src/common/service/mailer.service";
import { UsersDocument } from "src/schema/users.schema";
import { ResponseService } from "src/common/service/response.service";
import { InvoiceCalculationService } from "src/invoice/invoice-calculation.service";
import { EstimateStatus } from "src/common/constant/enum.constant";
import { StorageService } from "src/common/service/storage.service";
import { ItemsService } from "src/items/items.service";
import { AttachmentDocument } from "src/schema/attachment.schema";
import { ClientDocument } from "src/client/schema/client.schema";
import { EmailService } from "src/email/email.service";
import { UpdateEstimationDto } from "./dto/update-estimate.dto";
import { SendEstimateMailDto } from "./dto/send-estimate.dto";
import { AlertsService } from "src/alerts/alerts.service";
export declare class EstimationService {
    private estimationModel;
    private userModal;
    private clientModal;
    private attachmentModel;
    private resService;
    private calcService;
    private pdfService;
    private mailService;
    private itemService;
    private storageService;
    private emailService;
    private attachmentService;
    private alertService;
    constructor(estimationModel: Model<EstimationDocument>, userModal: Model<UsersDocument>, clientModal: Model<ClientDocument>, attachmentModel: Model<AttachmentDocument>, resService: ResponseService, calcService: InvoiceCalculationService, pdfService: PdfService, mailService: MailerService, itemService: ItemsService, storageService: StorageService, emailService: EmailService, attachmentService: AttachmentService, alertService: AlertsService);
    getNextEstimateNo(userId: Types.ObjectId): Promise<string>;
    getNextSystemEstimationNo(userId: Types.ObjectId): Promise<number>;
    createEstimate(userId: string, dto: CreateEstimationDto, res: Response, files?: Express.Multer.File[]): Promise<Response<any, Record<string, any>>>;
    updateEstimate(userId: string, estimateId: string, dto: UpdateEstimationDto, res: Response, files?: Express.Multer.File[]): Promise<Response<any, Record<string, any>>>;
    deleteEstimate(userId: string, estimateId: string, res: Response): Promise<Response<any, Record<string, any>>>;
    private sendEstimateStatusEmail;
    updateEstimateStatus(res: Response, invoiceId: string, newStatus: EstimateStatus): Promise<Response<any, Record<string, any>>>;
    getEstimates(res: Response, userId: string, page?: number, limit?: number, search?: string, status?: EstimateStatus): Promise<Response<any, Record<string, any>>>;
    getEstimateList(res: Response, userId: string, search?: string, status?: EstimateStatus): Promise<Response<any, Record<string, any>>>;
    getEstimateById(res: Response, estimateId: string): Promise<Response<any, Record<string, any>>>;
    sendEstimateEmail(estimateId: string, res: Response, dto: SendEstimateMailDto, userId: string): Promise<Response<any, Record<string, any>>>;
    getEstimateTemplates(res: Response): Promise<Response<any, Record<string, any>>>;
    generateEstimatePdf(estimateId: string, templateId: string, res: Response): Promise<Response<any, Record<string, any>>>;
    generateEstimateHtml(estimateId: string, res: Response): Promise<Response<any, Record<string, any>>>;
}
