import { Model, Types } from "mongoose";
import { UsersDocument } from "src/schema/users.schema";
import { CreateInvoiceDto } from "./dto/create-invoice.dto";
import { Response } from "express";
import { InvoiceDocument } from "src/schema/invoice.schema";
import { TaxDocument } from "src/schema/taxes.schema";
import { ResponseService } from "src/common/service/response.service";
import { ItemDocument } from "src/schema/item.schema";
import { EmailService } from "src/email/email.service";
import { ExpenseDocument } from "src/schema/expenses.schema";
import { AttachmentService } from "src/attachment/attachment.service";
import { AlertsService } from "src/alerts/alerts.service";
import { InvoiceStatus } from "src/common/constant/enum.constant";
import { AttachmentDocument } from "src/schema/attachment.schema";
import { PaymentDetailsDocument } from "src/schema/user-payment-details.schema";
import { StorageService } from "src/common/service/storage.service";
import { InvoiceCalculationService } from "./invoice-calculation.service";
import { ClientDocument } from "src/client/schema/client.schema";
import { ItemsService } from "src/items/items.service";
import { InvoiceCounterDocument } from "src/schema/invoice-counter.schema";
import { PdfService } from "src/pdf/pdf.service";
import { SendInvoiceEmailDto } from "./dto/send-invoice.dto";
import { MarkInvoicePaymentDto } from "./dto/mark-paid.dto";
import { RewardService } from "src/reward/reward.service";
export declare class InvoiceService {
    private readonly usersModal;
    private readonly attachmentModel;
    private readonly invoiceModal;
    private readonly clientModal;
    private readonly userPaymentMethodModel;
    private readonly taxModel;
    private readonly itemModal;
    private readonly invoiceCounterModel;
    private readonly expenseModel;
    private storageService;
    private calcService;
    private resService;
    private itemService;
    private pdfService;
    private emailService;
    private alertService;
    private rewardService;
    private attachmentService;
    constructor(usersModal: Model<UsersDocument>, attachmentModel: Model<AttachmentDocument>, invoiceModal: Model<InvoiceDocument>, clientModal: Model<ClientDocument>, userPaymentMethodModel: Model<PaymentDetailsDocument>, taxModel: Model<TaxDocument>, itemModal: Model<ItemDocument>, invoiceCounterModel: Model<InvoiceCounterDocument>, expenseModel: Model<ExpenseDocument>, storageService: StorageService, calcService: InvoiceCalculationService, resService: ResponseService, itemService: ItemsService, pdfService: PdfService, emailService: EmailService, alertService: AlertsService, rewardService: RewardService, attachmentService: AttachmentService);
    toBoolean(value: any): Promise<boolean | undefined>;
    normalizePaymentMethods(paymentMethods?: {
        bank?: any;
        stripe?: any;
        paypal?: any;
    }): Promise<{
        bank: boolean | undefined;
        stripe: boolean | undefined;
        paypal: boolean | undefined;
    } | undefined>;
    formatDate(date: Date): Promise<string>;
    buildPaymentDetails(enabledMethods: string[], paymentConfig: any): Promise<any>;
    getNextInvoiceNo(userId: Types.ObjectId): Promise<string>;
    getNextSystemInvoiceNo(userId: Types.ObjectId): Promise<number>;
    createInvoice(userId: string, dto: CreateInvoiceDto, res: Response, files?: Express.Multer.File[]): Promise<Response<any, Record<string, any>>>;
    getInvoices(userId: string, res: Response, page?: number, limit?: number, search?: string, status?: string): Promise<Response<any, Record<string, any>>>;
    getInvoiceById(invoiceId: string, res: Response): Promise<Response<any, Record<string, any>>>;
    updateInvoice(userId: string, invoiceId: string, dto: CreateInvoiceDto, res: Response, files?: Express.Multer.File[]): Promise<Response<any, Record<string, any>>>;
    updateInvoiceStatus(invoiceId: string, newStatus: InvoiceStatus, res: Response): Promise<Response<any, Record<string, any>>>;
    deleteInvoice(userId: string, invoiceId: string, res: Response): Promise<Response<any, Record<string, any>>>;
    generateInvoicePdf(invoiceId: string, templateId: string, res: Response): Promise<Response<any, Record<string, any>>>;
    getInvoiceTemplates(res: Response): Promise<Response<any, Record<string, any>>>;
    sendInvoiceEmail(invoiceId: string, res: Response, dto: SendInvoiceEmailDto, userId: string): Promise<Response<any, Record<string, any>>>;
    sendInvoiceDueReminderEmail(invoiceId: string, res: Response, userId: string): Promise<Response<any, Record<string, any>>>;
    sendInvoicePaidEmail(invoiceId: string, res: Response, userId: string): Promise<Response<any, Record<string, any>>>;
    generateInvoiceTemplateImages(invoiceId: string, res: Response): Promise<Response<any, Record<string, any>>>;
    generateInvoiceTemplateHtml(invoiceId: string, res: Response): Promise<Response<any, Record<string, any>>>;
    markInvoicePayment(userId: string, invoiceId: string, dto: MarkInvoicePaymentDto, res: Response): Promise<Response<any, Record<string, any>>>;
}
