import { CreateInvoiceDto } from "./dto/create-invoice.dto";
import { Model, Types } from "mongoose";
import { PaymentDetailsDocument } from "src/schema/user-payment-details.schema";
import { DiscountType, PaymentMethods, TaxType } from "src/common/constant/enum.constant";
import { InvoiceDocument } from "src/schema/invoice.schema";
import { StorageService } from "src/common/service/storage.service";
import { ResponseService } from "src/common/service/response.service";
import { ResolvedInvoiceItem } from "src/items/resolve-item.interface";
import { CreateEstimationDto } from "src/estimation/dto/estimation.dto";
export declare class InvoiceCalculationService {
    private readonly userPaymentMethodModel;
    private invoiceModel;
    private storageService;
    private resService;
    constructor(userPaymentMethodModel: Model<PaymentDetailsDocument>, invoiceModel: Model<InvoiceDocument>, storageService: StorageService, resService: ResponseService);
    toBoolean(value: any): Promise<boolean | undefined>;
    calculate(dto: CreateInvoiceDto, items: ResolvedInvoiceItem[]): Promise<{
        items: {
            taxAmount: number;
            lineTotal: number;
            baseAmount: number;
            discountAmount: number;
            amountAfterDiscount: number;
            taxPercentage: number;
            isTaxable: boolean | undefined;
            itemId: Types.ObjectId;
            name: string;
            description?: string | undefined;
            taxName?: string | undefined;
            discountType: DiscountType;
            discountValue: number;
            price: number;
            quantity: number;
        }[];
        grossSubTotal: number;
        itemDiscountTotal: number;
        subTotal: number;
        discountType: DiscountType;
        discountValue: number;
        discountAmount: number;
        taxType: TaxType;
        taxPercentage: number;
        taxAmount: number;
        taxName: string;
        total: number;
    }>;
    calculateEstimate(dto: CreateEstimationDto, items: ResolvedInvoiceItem[]): Promise<{
        items: {
            taxAmount: number;
            lineTotal: number;
            baseAmount: number;
            discountAmount: number;
            amountAfterDiscount: number;
            taxPercentage: number;
            isTaxable: boolean | undefined;
            itemId: Types.ObjectId;
            name: string;
            description?: string | undefined;
            taxName?: string | undefined;
            discountType: DiscountType;
            discountValue: number;
            price: number;
            quantity: number;
        }[];
        grossSubTotal: number;
        itemDiscountTotal: number;
        subTotal: number;
        estimateDiscountType: DiscountType;
        estimateDiscountValue: number;
        estimateDiscountAmount: number;
        taxType: TaxType;
        taxPercentage: number;
        taxName: string;
        taxTotal: number;
        total: number;
    }>;
    validatePaymentMethods(userObjectId: Types.ObjectId, paymentMethods?: {
        bank?: boolean;
        stripe?: boolean;
        paypal?: boolean;
    }): Promise<PaymentMethods[]>;
}
