import { CalculatePricingOnAdminDto, CreateBookingDto, ScheduleBookingDto } from './dto/booking.dto';
import { DbService } from 'src/db/db.service';
import { CommonService } from 'src/common/common.service';
import 'moment-timezone';
import { Types } from 'mongoose';
import { ActivityService } from 'src/activity/activity.service';
import { Server } from 'socket.io';
import { PayoutType } from 'src/configuration/schema/app-configuration.schema';
import { UsersType } from 'src/auth/role/user.role';
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;
    intercity_per_min_fare: number;
    per_min_fare: number;
    base_km: number;
    base_mins: number;
    intercity_base_mins: number;
    intercity_base_km: number;
    ac_extra_per_km: number;
    ac_extra_charge?: number;
    night_stay_charges: number;
    return_trip_charges: number;
    airport_charges: number;
    self_ride_deposit?: number;
    load_unload_charges?: number;
    free_load_unload_time?: number;
    incentive_amount: number;
    car_pooling_max_passengers?: number;
    car_pooling_discount_percentage?: number;
}
interface BaseFeeResult {
    base_fee: number;
    distance_fare?: number;
    return_trip_charges: number;
    insurance_fees: number;
    airport_drop_charges: number;
    airport_pickup_charges: number;
    baseFare?: number;
    totalAcFees?: number;
    totalExtraKms?: number;
    totalExtraDuration?: number;
    load_unload_charges?: number;
    incentive?: number;
    durationFareSingleTrip?: number;
    durationFareReturnTrip?: number;
}
interface User {
    _id: Types.ObjectId;
    timeZone?: string;
}
export declare class CreateBookingService {
    private readonly model;
    private readonly commonService;
    private readonly activityService;
    private readonly bookingService;
    private readonly logger;
    server: Server;
    constructor(model: DbService, commonService: CommonService, activityService: ActivityService, bookingService: BookingService);
    private createBookingId;
    private generateOtp;
    private getValidDailyHours;
    getPricingToConsider(lat: string, lng: string, vehicle_id: string, request_type: string): Promise<VehiclePricing>;
    private calculateWeekdays;
    getServiceLocationFromLatLong(lat: number, long: number): Promise<any>;
    checkSurchargeDate(vehicle_id: string, lat: number, long: number, timeZone?: string, scheduleTime?: number): Promise<number | null>;
    calculateBaseFee(body: CreateBookingDto | any, distance: number, vehicle_pricing: VehiclePricing, returnTripDistance?: number, singleTripDuration?: number, returnTripDuration?: number, is_ac?: boolean): Promise<BaseFeeResult>;
    estimateEarning(vehicleId: string, kms: number, payoutType?: PayoutType, speed?: number): Promise<{
        you_earn: number;
    }>;
    calculateCouponDiscount(coupon_id: string, base_fee: number, user_id: string, surcharge_amount: number, locationSurchargeMultiplier?: number, number_of_trips?: number, checkCouponForAlreadyUsed?: boolean): Promise<number>;
    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;
    }) | {
        message: string;
        booking: any;
    } | {
        booking: any;
        amount: number;
        meta: any;
        ref_id: string;
    } | {
        booking: any;
        client_secret: string;
        paymentIntent: string;
        status: import("stripe").Stripe.PaymentIntent.Status;
        requires_action: boolean;
        amount: number;
        ephemeralKey: any;
        customer: any;
        order_id?: undefined;
        cf_order_id?: undefined;
        payment_sessions_id?: undefined;
    } | {
        booking: any;
        order_id: any;
        amount: number;
        client_secret?: undefined;
        paymentIntent?: undefined;
        status?: undefined;
        requires_action?: undefined;
        ephemeralKey?: undefined;
        customer?: undefined;
        cf_order_id?: undefined;
        payment_sessions_id?: undefined;
    } | {
        booking: any;
        order_id: any;
        cf_order_id: any;
        payment_sessions_id: any;
        amount: any;
        client_secret?: undefined;
        paymentIntent?: undefined;
        status?: undefined;
        requires_action?: undefined;
        ephemeralKey?: undefined;
        customer?: undefined;
    }>;
    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;
    }) | {
        message: string;
        booking: any;
    } | {
        booking: any;
        amount: number;
        meta: any;
        ref_id: string;
    } | {
        booking: any;
        client_secret: string;
        paymentIntent: string;
        status: import("stripe").Stripe.PaymentIntent.Status;
        requires_action: boolean;
        amount: number;
        ephemeralKey: any;
        customer: any;
        order_id?: undefined;
        cf_order_id?: undefined;
        payment_sessions_id?: undefined;
    } | {
        booking: any;
        order_id: any;
        amount: number;
        client_secret?: undefined;
        paymentIntent?: undefined;
        status?: undefined;
        requires_action?: undefined;
        ephemeralKey?: undefined;
        customer?: undefined;
        cf_order_id?: undefined;
        payment_sessions_id?: undefined;
    } | {
        booking: any;
        order_id: any;
        cf_order_id: any;
        payment_sessions_id: any;
        amount: any;
        client_secret?: undefined;
        paymentIntent?: undefined;
        status?: undefined;
        requires_action?: undefined;
        ephemeralKey?: undefined;
        customer?: undefined;
    }>;
    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;
    }) | {
        message: string;
        booking: any;
    } | {
        booking: any;
        amount: number;
        meta: any;
        ref_id: string;
    } | {
        booking: any;
        client_secret: string;
        paymentIntent: string;
        status: import("stripe").Stripe.PaymentIntent.Status;
        requires_action: boolean;
        amount: number;
        ephemeralKey: any;
        customer: any;
        order_id?: undefined;
        cf_order_id?: undefined;
        payment_sessions_id?: undefined;
    } | {
        booking: any;
        order_id: any;
        amount: number;
        client_secret?: undefined;
        paymentIntent?: undefined;
        status?: undefined;
        requires_action?: undefined;
        ephemeralKey?: undefined;
        customer?: undefined;
        cf_order_id?: undefined;
        payment_sessions_id?: undefined;
    } | {
        booking: any;
        order_id: any;
        cf_order_id: any;
        payment_sessions_id: any;
        amount: any;
        client_secret?: undefined;
        paymentIntent?: undefined;
        status?: undefined;
        requires_action?: undefined;
        ephemeralKey?: undefined;
        customer?: undefined;
    }>;
    getVehiclePricing(dto: CalculatePricingOnAdminDto): Promise<import("mongoose").FlattenMaps<{
        vehicle_id: string;
        commission_percentage: number;
        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;
            };
        };
        ac_extra_per_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;
            };
        };
        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_mins_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;
            };
        };
        intercity_base_mins_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;
            };
        };
        intercity_per_min_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;
            };
        };
        per_min_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;
            };
        };
        base_mins: {
            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;
            };
        };
        intercity_base_mins: {
            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;
            };
        };
        intercity_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;
            };
        };
        sequence: number;
        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;
        self_ride_deposit: number;
        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;
        load_unload_charges: number;
        free_load_unload_time: number;
        hourly_max_km: number;
        hourly_km_rate: number;
        car_pooling_max_passengers: number;
        car_pooling_discount_percentage: 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: number;
        charges_per_km: number;
        duration_fare: number;
        duration: number;
        ac_charges: number;
        extra_kms: number;
        extra_mins: 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;
    }>;
    getBookingAmount: (bookingDto: any, user: User) => Promise<any>;
}
export {};
