import mongoose, { PipelineStage } from 'mongoose';
import { OrderStatus } from 'src/order/schema/order.schema';
import { restaurantStatus } from 'src/restaurant/schema/restaurant.schema';
export declare class CustomerAggregation {
    match(customer_id: any, order_status?: string, order_type?: string): Promise<{
        $match: any;
    }>;
    RestaurantLookup(): Promise<{
        $lookup: {
            from: string;
            let: {
                restaurant_id: string;
            };
            pipeline: ({
                $match: {
                    $expr: {
                        $and: {
                            $eq: string[];
                        }[];
                    };
                };
                $project?: undefined;
            } | {
                $project: {
                    restaurant_name: number;
                    address: number;
                    image: number;
                    food_type: number;
                    status: number;
                    working_day: number;
                };
                $match?: undefined;
            })[];
            as: string;
        };
    }>;
    UnwindRestaurantLookup(): Promise<{
        $unwind: {
            path: string;
            preserveNullAndEmptyArrays: boolean;
        };
    }>;
    project(): Promise<{
        $project: {
            restaurant: number;
            cart_items: number;
            other_cart_items: number;
            total_amount: number;
            order_placed_at: number;
            order_type: number;
            order_id: number;
            ride_status: number;
            order_status: number;
            driver: number;
            promo_wallet_redeemed: number;
            promo_wallet_amount: number;
            loyalty_point_redeemed: number;
        };
    }>;
    project_active_order(): Promise<{
        $project: {
            restaurant: number;
            cart_items: number;
            total_amount: number;
            order_placed_at: number;
            order_id: number;
            ride_status: number;
            order_status: number;
            driver: {
                _id: number;
                name: number;
                image: number;
                phone: number;
                country_code: number;
            };
        };
    }>;
    face_set(option: any): Promise<{
        $facet: {
            count: {
                $count: string;
            }[];
            data: ({
                $sort: {
                    _id: 1 | -1;
                };
                $skip?: undefined;
                $limit?: undefined;
            } | {
                $skip: any;
                $sort?: undefined;
                $limit?: undefined;
            } | {
                $limit: any;
                $sort?: undefined;
                $skip?: undefined;
            })[];
        };
    }>;
    Customermatch(): Promise<{
        $match: {
            is_active: boolean;
            is_block: boolean;
            is_deleted: boolean;
            is_email_verify: boolean;
            is_phone_verify: boolean;
        };
    }>;
    DeletedCustomermatch(): Promise<{
        $match: {
            is_deleted: boolean;
        };
    }>;
    BlockCustomerMatch(): Promise<{
        $match: {
            is_block: boolean;
            is_deleted: boolean;
        };
    }>;
    order_count_lookup(): Promise<{
        $lookup: {
            from: string;
            let: {
                customerId: string;
            };
            pipeline: {
                $match: {
                    $expr: {
                        $eq: string[];
                    };
                    $nor: {
                        payment_type: string;
                        payment_status: string;
                    }[];
                };
            }[];
            as: string;
        };
    }>;
    AddField(): Promise<{
        $addFields: {
            orderCount: {
                $size: string;
            };
        };
    }>;
    customer_address_lookup(): Promise<{
        $lookup: {
            from: string;
            localField: string;
            foreignField: string;
            as: string;
        };
    }>;
    fillter_data(search: any): Promise<{
        $redact: {
            $cond: {
                if: {
                    $and: {
                        $or: ({
                            $eq: any[];
                            $regexMatch?: undefined;
                        } | {
                            $regexMatch: {
                                input: string;
                                regex: any;
                                options: string;
                            };
                            $eq?: undefined;
                        })[];
                    }[];
                };
                then: string;
                else: string;
            };
        };
    }>;
    projectFields(isPending?: boolean): Promise<{
        $project: {
            _id: number;
            name: number;
            phone: number;
            country_code: number;
            email: number;
            image: number;
            is_active: number;
            is_block: number;
            is_deleted: number;
            orderCount: number;
            current_address: number;
            pending_status: number | {
                $ifNull: string[];
            };
            pending_status_reason: number;
        };
    }>;
    customer_match(id: any): Promise<{
        $match: {
            customer_id: mongoose.Types.ObjectId;
            $nor: {
                payment_type: string;
                payment_status: string;
            }[];
        };
    }>;
    customer_active_order_status_match(customer_id: string): Promise<{
        $match: {
            customer_id: mongoose.Types.ObjectId;
            order_status: {
                $in: OrderStatus[];
            };
        };
    }>;
    driver_match(id: any): Promise<{
        $match: {
            driver_id: mongoose.Types.ObjectId;
        };
    }>;
    customer_lookup(): Promise<{
        $lookup: {
            from: string;
            localField: string;
            foreignField: string;
            as: string;
        };
    }>;
    vehicle_lookup(): Promise<{
        $lookup: {
            from: string;
            localField: string;
            foreignField: string;
            as: string;
        };
    }>;
    driver_lookup(): Promise<{
        $lookup: {
            from: string;
            localField: string;
            foreignField: string;
            as: string;
        };
    }>;
    restaurant_lookup(): Promise<{
        $lookup: {
            from: string;
            localField: string;
            foreignField: string;
            as: string;
        };
    }>;
    unwind__customerdata(): Promise<{
        $unwind: {
            path: string;
            preserveNullAndEmptyArrays: boolean;
        };
    }>;
    unwind__restaurantdata(): Promise<{
        $unwind: {
            path: string;
            preserveNullAndEmptyArrays: boolean;
        };
    }>;
    unwind_driverdata(): Promise<{
        $unwind: {
            path: string;
            preserveNullAndEmptyArrays: boolean;
        };
    }>;
    OrderProject(): Promise<{
        $project: {
            order_id: number;
            delivery_address: number;
            drop_address: number;
            order_status: number;
            total_amount: number;
            created_at: number;
            'customer.name': number;
            'driver.name': number;
            'restaurant.restaurant_name': number;
        };
    }>;
    filterByLatLong(lat: any, long: any, restaurant_range: any): Promise<PipelineStage.GeoNear>;
    matchRestaurant(res_ids: any): Promise<{
        $match: {
            _id: {
                $in: any;
            };
            status: restaurantStatus;
            is_block: boolean;
            is_restaurant_verified: boolean;
            is_deleted: boolean;
        };
    }>;
    FoodItemLookup(): Promise<{
        $lookup: {
            from: string;
            let: {
                restaurant_id: string;
            };
            pipeline: ({
                $match: {
                    catering_services: boolean;
                    $expr: {
                        $and: {
                            $eq: string[];
                        }[];
                    };
                };
                $lookup?: undefined;
            } | {
                $lookup: {
                    from: string;
                    let: {
                        category_id: string;
                    };
                    pipeline: {
                        $match: {
                            $expr: {
                                $and: {
                                    $eq: string[];
                                }[];
                            };
                        };
                    }[];
                    as: string;
                };
                $match?: undefined;
            })[];
            as: string;
        };
    }>;
    unwindFoodItem(): Promise<{
        $unwind: {
            path: string;
            preserveNullAndEmptyArrays: boolean;
        };
    }>;
    OtherItemLookup(): Promise<{
        $lookup: {
            from: string;
            let: {
                restaurant_id: string;
            };
            pipeline: ({
                $match: {
                    $expr: {
                        $and: {
                            $eq: string[];
                        }[];
                    };
                };
                $lookup?: undefined;
            } | {
                $lookup: {
                    from: string;
                    let: {
                        category_id: string;
                    };
                    pipeline: {
                        $match: {
                            $expr: {
                                $and: {
                                    $eq: string[];
                                }[];
                            };
                        };
                    }[];
                    as: string;
                };
                $match?: undefined;
            })[];
            as: string;
        };
    }>;
    unwindOtherItem(): Promise<{
        $unwind: {
            path: string;
            preserveNullAndEmptyArrays: boolean;
        };
    }>;
    ReviewLookup(): Promise<{
        $lookup: {
            from: string;
            let: {
                restaurant_id: string;
            };
            pipeline: ({
                $match: {
                    $expr: {
                        $eq: string[];
                    };
                };
                $group?: undefined;
            } | {
                $group: {
                    _id: any;
                    avg_rating: {
                        $avg: string;
                    };
                    rating_count: {
                        $sum: number;
                    };
                };
                $match?: undefined;
            })[];
            as: string;
        };
    }>;
    unwindReviews(): Promise<{
        $unwind: {
            path: string;
            preserveNullAndEmptyArrays: boolean;
        };
    }>;
    projectRestaurant(): Promise<{
        $project: {
            _id: number;
            restaurant_name: number;
            restaurant_phone: number;
            type: number;
            average_preparing_time: number;
            address: number;
            country_code: number;
            image: number;
            food_licence_image: number;
            status: number;
            food_type: number;
            is_active: number;
            is_block: number;
            reason: number;
            rating: number;
            is_restaurant_verified: number;
            is_submit_verification: number;
            is_restaurant_update: number;
            total_orders: number;
            created_at: number;
            location: number;
            distance: number;
            category: {
                $arrayElemAt: (string | number)[];
            };
            foods: number;
            items: number;
            reviews: string;
            rating_count: string;
        };
    }>;
    PendingCustomermatch(pending_status?: string): Promise<{
        $match: any;
    }>;
    addReviews(): Promise<{
        $set: {
            rating: {
                $ifNull: (number | {
                    $avg: string;
                })[];
            };
        };
    }>;
    projectReviews(): Promise<{
        $project: {
            _id: number;
            restaurant_id: number;
            customer_id: number;
            rating: number;
            review: number;
            created_at: number;
            updated_at: number;
        };
    }>;
    agent_customer_lookup(): Promise<{
        $lookup: {
            from: string;
            localField: string;
            foreignField: string;
            as: string;
        };
    }>;
    corporate_client_lookup(): Promise<{
        $lookup: {
            from: string;
            localField: string;
            foreignField: string;
            as: string;
        };
    }>;
    unwindVehicleData(): Promise<{
        $unwind: {
            path: string;
            preserveNullAndEmptyArrays: boolean;
        };
    }>;
    unwind_agentcustomerdata(): Promise<{
        $unwind: {
            path: string;
            preserveNullAndEmptyArrays: boolean;
        };
    }>;
    unwind_corporateclientdata(): Promise<{
        $unwind: {
            path: string;
            preserveNullAndEmptyArrays: boolean;
        };
    }>;
}
