import { CalculatePricingOnAdminDto, CreateBookingDto, ScheduleBookingDto } from './dto/booking.dto';
import { DbService } from 'src/db/db.service';
import { CommonService } from 'src/common/common.service';
import { EventEmitter2 } from '@nestjs/event-emitter';
import { BookingAggregation } from './booking.aggregation';
import { Types } from 'mongoose';
import { BookingGateway } from './booking.gateway';
import { ActivityService } from 'src/activity/activity.service';
import { Server } from 'socket.io';
import { UsersType } from 'src/auth/role/user.role';
import { CashfreeService } from 'src/common/helpers/cashfree-helper.service';
import { BookingService } from './booking.service';
interface VehiclePricing {
    city_fees_unit: string;
    comfort_options: any;
    surcharge_price(surcharge_price: any): unknown;
    service_type: any;
    insurance_fees: number;
    airport_pickup_charges: number;
    airport_drop_charges: number;
    hourly_rate: number;
    hourly_max_km: number;
    hourly_km_rate: number;
    distance_price: number;
    base_fare: number;
    interncity_distance_price: number;
    intercity_base_fare: number;
    night_charges: number;
    stop_charges: number;
    city_fees: number;
    infrastructure_fees: number;
    app_commission_value: number;
    app_commission_unit: 'percentage' | 'fixed';
    intercity_commision_percentage: number;
    commission_percentage: number;
    vehicle_id?: any;
    cancellation_charges: number;
    base_km: number;
}
interface BaseFeeResult {
    base_fee: number;
    return_trip_charges: number;
    insurance_fees: number;
    airport_drop_charges: number;
    airport_pickup_charges: number;
    totalExtraKms?: number;
    distanceFare?: number;
}
interface BookingCalculation {
    driver_amount: number;
    app_amount: number;
    basic_trip_amount: number;
    payout_gst_amount: number;
    commission_gst_amount: number;
    city_fee: number;
    infrastructure_fee: number;
    insurance_fee: number;
    app_commission: number;
    app_commission_value: number;
    app_commission_unit: string;
    total_amount: number;
    surcharge_amount?: number;
    commission?: number;
}
interface User {
    _id: Types.ObjectId;
    timeZone?: string;
}
export declare class CreateBookingService {
    private readonly model;
    private readonly commonService;
    private readonly eventEmitter;
    private readonly bookingAggregation;
    private readonly bookingGateway;
    private readonly activityService;
    private readonly cashfreeService;
    private readonly bookingService;
    private readonly logger;
    server: Server;
    constructor(model: DbService, commonService: CommonService, eventEmitter: EventEmitter2, bookingAggregation: BookingAggregation, bookingGateway: BookingGateway, activityService: ActivityService, cashfreeService: CashfreeService, bookingService: BookingService);
    private createBookingId;
    private generateOtp;
    getPricingToConsider(lat: string, lng: string, vehicle_id: string, request_type: string): Promise<VehiclePricing>;
    private calculateWeekdays;
    checkSurchargeDate(vehicle_id: string, lat: number, long: number, timeZone?: string, scheduleTime?: number): Promise<number | null>;
    calculateBaseFee(body: CreateBookingDto | any, distance: number, vehicle_pricing: VehiclePricing): Promise<BaseFeeResult>;
    private calculateCouponDiscount;
    calculateBookingAmount(base_fee: number, coupon_amount: number, surcharge_amount: number, locationSurchargeMultiplier: number, commission_percentage: number, pricing: VehiclePricing, insurance_fees: number, is_airport_pickup: boolean, is_airport_drop: boolean): Promise<BookingCalculation>;
    private saveBookingPayload;
    createBooking(bookingDto: CreateBookingDto | ScheduleBookingDto, user_type: UsersType, user_id: string): Promise<import("mongoose").Document<unknown, {}, import("./schema/booking.schema").Booking, {}, {}> & import("./schema/booking.schema").Booking & {
        _id: Types.ObjectId;
    } & {
        __v: number;
    }>;
    createScheduledBooking_(bookingDto: CreateBookingDto | ScheduleBookingDto): Promise<void>;
    createScheduledBooking(bookingDto: ScheduleBookingDto | any, user_type: UsersType, customer_id: string, is_corporate_user: any, corporate: any): Promise<import("mongoose").Document<unknown, {}, import("./schema/booking.schema").Booking, {}, {}> & import("./schema/booking.schema").Booking & {
        _id: Types.ObjectId;
    } & {
        __v: number;
    }>;
    createCurrentBooking(bookingDto: CreateBookingDto | ScheduleBookingDto, user_type: UsersType, user: User, is_corporate_user: any, corporate: any): Promise<import("mongoose").Document<unknown, {}, import("./schema/booking.schema").Booking, {}, {}> & import("./schema/booking.schema").Booking & {
        _id: Types.ObjectId;
    } & {
        __v: number;
    }>;
    getVehiclePricing(dto: CalculatePricingOnAdminDto): Promise<import("mongoose").FlattenMaps<{
        vehicle_id: string;
        commission_percentage: {
            toString: (radix?: number) => string;
            toFixed: (fractionDigits?: number) => string;
            toExponential: (fractionDigits?: number) => string;
            toPrecision: (precision?: number) => string;
            valueOf: () => number;
            toLocaleString: {
                (locales?: string | string[], options?: Intl.NumberFormatOptions): string;
                (locales?: Intl.LocalesArgument, options?: Intl.NumberFormatOptions): string;
            };
        };
        app_commission_value: number;
        app_commission_unit: string;
        distance_price: {
            toString: (radix?: number) => string;
            toFixed: (fractionDigits?: number) => string;
            toExponential: (fractionDigits?: number) => string;
            toPrecision: (precision?: number) => string;
            valueOf: () => number;
            toLocaleString: {
                (locales?: string | string[], options?: Intl.NumberFormatOptions): string;
                (locales?: Intl.LocalesArgument, options?: Intl.NumberFormatOptions): string;
            };
        };
        infrastructure_fees: {
            toString: (radix?: number) => string;
            toFixed: (fractionDigits?: number) => string;
            toExponential: (fractionDigits?: number) => string;
            toPrecision: (precision?: number) => string;
            valueOf: () => number;
            toLocaleString: {
                (locales?: string | string[], options?: Intl.NumberFormatOptions): string;
                (locales?: Intl.LocalesArgument, options?: Intl.NumberFormatOptions): string;
            };
        };
        base_fare: {
            toString: (radix?: number) => string;
            toFixed: (fractionDigits?: number) => string;
            toExponential: (fractionDigits?: number) => string;
            toPrecision: (precision?: number) => string;
            valueOf: () => number;
            toLocaleString: {
                (locales?: string | string[], options?: Intl.NumberFormatOptions): string;
                (locales?: Intl.LocalesArgument, options?: Intl.NumberFormatOptions): string;
            };
        };
        base_km: {
            toString: (radix?: number) => string;
            toFixed: (fractionDigits?: number) => string;
            toExponential: (fractionDigits?: number) => string;
            toPrecision: (precision?: number) => string;
            valueOf: () => number;
            toLocaleString: {
                (locales?: string | string[], options?: Intl.NumberFormatOptions): string;
                (locales?: Intl.LocalesArgument, options?: Intl.NumberFormatOptions): string;
            };
        };
        surcharge_price: {
            toString: (radix?: number) => string;
            toFixed: (fractionDigits?: number) => string;
            toExponential: (fractionDigits?: number) => string;
            toPrecision: (precision?: number) => string;
            valueOf: () => number;
            toLocaleString: {
                (locales?: string | string[], options?: Intl.NumberFormatOptions): string;
                (locales?: Intl.LocalesArgument, options?: Intl.NumberFormatOptions): string;
            };
        };
        gst_percentage: string;
        stop_charges: {
            toString: (radix?: number) => string;
            toFixed: (fractionDigits?: number) => string;
            toExponential: (fractionDigits?: number) => string;
            toPrecision: (precision?: number) => string;
            valueOf: () => number;
            toLocaleString: {
                (locales?: string | string[], options?: Intl.NumberFormatOptions): string;
                (locales?: Intl.LocalesArgument, options?: Intl.NumberFormatOptions): string;
            };
        };
        is_active: boolean;
        created_at: number;
        updated_at: number;
        parcel_details: {
            description: string;
            image: string;
        }[];
        interncity_distance_price: string;
        intercity_commision_percentage: number;
        insurance_fees: {
            toString: (radix?: number) => string;
            toFixed: (fractionDigits?: number) => string;
            toExponential: (fractionDigits?: number) => string;
            toPrecision: (precision?: number) => string;
            valueOf: () => number;
            toLocaleString: {
                (locales?: string | string[], options?: Intl.NumberFormatOptions): string;
                (locales?: Intl.LocalesArgument, options?: Intl.NumberFormatOptions): string;
            };
        };
        city_fees: {
            toString: (radix?: number) => string;
            toFixed: (fractionDigits?: number) => string;
            toExponential: (fractionDigits?: number) => string;
            toPrecision: (precision?: number) => string;
            valueOf: () => number;
            toLocaleString: {
                (locales?: string | string[], options?: Intl.NumberFormatOptions): string;
                (locales?: Intl.LocalesArgument, options?: Intl.NumberFormatOptions): string;
            };
        };
        city_fees_unit: string;
        intercity_base_fare: number;
        night_charges: number;
        cancellation_charges: number;
        hourly_rate: number;
        hourly_max_km: number;
        hourly_km_rate: number;
        airport_pickup_charges: number;
        airport_drop_charges: number;
        comfort_options: {
            wheel_chair: boolean;
            baby_seat: boolean;
        };
        service_type: string[];
    }> & {
        _id: Types.ObjectId;
    } & {
        __v: number;
    }>;
    calculatePricingOnAdmin(dto: CalculatePricingOnAdminDto): Promise<{
        base_fee: any;
        charges_per_km: number;
        duration: number;
        extra_kms: number;
        base_kms: any;
        base_mins: any;
        surcharge: number;
        platform_fee: number;
        infrastructure_fee: number;
        basic_trip_amount: number;
        insurance_fee: number;
        city_fee: number;
        airport_pickup_charges: number;
        airport_drop_charges: number;
        gst_for_driver: number;
        gst_for_app: number;
        total_trip_price_to_be_paid_by_customer: number;
        comission_fee: number;
        admin_commission: number;
        driver_payment: number;
        total_trip_price_to_be_paid_by_customer_driver_payment: number;
        insurance_fee_app_payment: number;
        total_trip_price_to_be_paid_by_customer_app_payment: number;
        airport_charges_payout_to: string;
        driver_gst_payout_to: string;
        return_trip_charges: number;
        night_stay_charges: number;
        load_unload_charges: number;
        toll_charges: number;
        waiting_charge: number;
        extra_waiting_mins: number;
        waiting_charge_per_min: number;
        surcharge_multiplier: number;
        car_pooling_discount_percentage: number;
        discount_percentage: number;
        number_of_seats: number;
        max_seats: number;
    }>;
}
export {};
