import { Types } from 'mongoose';
import { PlanCreateDto, PlanListDto, PlanUpdateDto } from './dto/plan.dto';
import { PurchaseSubscriptionDto } from './dto/subscription.dto';
import { CommonService } from 'src/common/common.service';
import { ConfigService } from '@nestjs/config';
import { ModelsService } from 'src/models/models.service';
import { BillingCycle } from './schema/plan.schema';
import { PricingService } from './pricing.service';
import { RequestDto } from 'src/user/dto/user.dto';
import { PaymentGateway } from 'src/settings/schema/settings.schema';
import { RazorpayService } from 'src/razorpay/razorpay.service';
import { TranslationService } from 'src/common/services/translation.service';
export declare class SubscritpionService {
    private readonly Model;
    private readonly CommonService;
    private readonly ConfigService;
    private readonly RazorpayService;
    private readonly translationService;
    private readonly PricingService;
    constructor(Model: ModelsService, CommonService: CommonService, ConfigService: ConfigService, RazorpayService: RazorpayService, translationService: TranslationService, PricingService: PricingService);
    private sendUserNotification;
    cancelCurrentSubscription(user_id: Types.ObjectId, req: any): Promise<{
        message: string;
        data: any;
    }>;
    reactivateCurrentSubscription(user_id: Types.ObjectId, req: any): Promise<{
        message: string;
        data: any;
    }>;
    createPlan(createDto: PlanCreateDto, req?: any): Promise<{
        data: import("mongoose").Document<unknown, {}, import("mongoose").Document<unknown, {}, import("./schema/plan.schema").Plans, {}> & import("./schema/plan.schema").Plans & {
            _id: Types.ObjectId;
        } & {
            __v: number;
        }, {}> & import("mongoose").Document<unknown, {}, import("./schema/plan.schema").Plans, {}> & import("./schema/plan.schema").Plans & {
            _id: Types.ObjectId;
        } & {
            __v: number;
        } & Required<{
            _id: Types.ObjectId;
        }>;
        message: string;
    }>;
    adminGetAllPlans(payload: PlanListDto): Promise<{
        data: (import("mongoose").Document<unknown, {}, import("mongoose").Document<unknown, {}, import("./schema/plan.schema").Plans, {}> & import("./schema/plan.schema").Plans & {
            _id: Types.ObjectId;
        } & {
            __v: number;
        }, {}> & import("mongoose").Document<unknown, {}, import("./schema/plan.schema").Plans, {}> & import("./schema/plan.schema").Plans & {
            _id: Types.ObjectId;
        } & {
            __v: number;
        } & Required<{
            _id: Types.ObjectId;
        }>)[];
        count: number;
    }>;
    findOnePlan(id: string, req?: any): Promise<import("mongoose").Document<unknown, {}, import("mongoose").Document<unknown, {}, import("./schema/plan.schema").Plans, {}> & import("./schema/plan.schema").Plans & {
        _id: Types.ObjectId;
    } & {
        __v: number;
    }, {}> & import("mongoose").Document<unknown, {}, import("./schema/plan.schema").Plans, {}> & import("./schema/plan.schema").Plans & {
        _id: Types.ObjectId;
    } & {
        __v: number;
    } & Required<{
        _id: Types.ObjectId;
    }>>;
    updatePlan(id: string, updateDto: PlanUpdateDto, req?: any): Promise<import("mongoose").Document<unknown, {}, import("mongoose").Document<unknown, {}, import("./schema/plan.schema").Plans, {}> & import("./schema/plan.schema").Plans & {
        _id: Types.ObjectId;
    } & {
        __v: number;
    }, {}> & import("mongoose").Document<unknown, {}, import("./schema/plan.schema").Plans, {}> & import("./schema/plan.schema").Plans & {
        _id: Types.ObjectId;
    } & {
        __v: number;
    } & Required<{
        _id: Types.ObjectId;
    }>>;
    updatePlanStatus(id: string, is_active: boolean, req?: any): Promise<{
        message: string;
        data: import("mongoose").Document<unknown, {}, import("mongoose").Document<unknown, {}, import("./schema/plan.schema").Plans, {}> & import("./schema/plan.schema").Plans & {
            _id: Types.ObjectId;
        } & {
            __v: number;
        }, {}> & import("mongoose").Document<unknown, {}, import("./schema/plan.schema").Plans, {}> & import("./schema/plan.schema").Plans & {
            _id: Types.ObjectId;
        } & {
            __v: number;
        } & Required<{
            _id: Types.ObjectId;
        }>;
    }>;
    removePlan(id: string, req?: any): Promise<{
        message: string;
    }>;
    getPlans(req: any): Promise<{
        data: any;
    }>;
    getMySubscription(req: RequestDto): Promise<{
        data: {
            has_subscription: boolean;
            active_subscription: any;
            plan: (import("mongoose").FlattenMaps<import("mongoose").Document<unknown, {}, import("./schema/plan.schema").Plans, {}> & import("./schema/plan.schema").Plans & {
                _id: Types.ObjectId;
            } & {
                __v: number;
            }> & Required<{
                _id: Types.ObjectId;
            }>) | null;
            used_vehicles: number;
            vehicle_limit: any;
            remaining_vehicles: number;
        };
    }>;
    getPlansDetails(req: Request, plan_id: string): Promise<{
        data: any;
    }>;
    calculatePlanDetails(vehicle_count: number, billing_cycle: BillingCycle, req: any): Promise<{
        data: {
            vehicle_count: number;
            billing_cycle: BillingCycle;
            plan_id: string;
            plan: import("mongoose").FlattenMaps<import("mongoose").Document<unknown, {}, import("./schema/plan.schema").Plans, {}> & import("./schema/plan.schema").Plans & {
                _id: Types.ObjectId;
            } & {
                __v: number;
            }> & Required<{
                _id: Types.ObjectId;
            }>;
            slab: import("mongoose").FlattenMaps<import("mongoose").Document<unknown, {}, import("./schema/plan.schema").Plans, {}> & import("./schema/plan.schema").Plans & {
                _id: Types.ObjectId;
            } & {
                __v: number;
            }> & Required<{
                _id: Types.ObjectId;
            }>;
            amount: number;
        };
    }>;
    getBillingHistory(req: RequestDto): Promise<{
        data: {
            invoices: never[];
            current_vehicle_count: number;
            plan: null;
            subscription_status: null;
            next_billing_date?: undefined;
        };
    } | {
        data: {
            invoices: any[];
            current_vehicle_count: number;
            plan: (import("mongoose").FlattenMaps<import("mongoose").Document<unknown, {}, import("./schema/plan.schema").Plans, {}> & import("./schema/plan.schema").Plans & {
                _id: Types.ObjectId;
            } & {
                __v: number;
            }> & Required<{
                _id: Types.ObjectId;
            }>) | null;
            subscription_status: any;
            next_billing_date: any;
        };
    }>;
    buySubscription(createDto: PurchaseSubscriptionDto, req: RequestDto): Promise<{
        updated: boolean;
        message: string;
        amount: number;
        vehicle_count: number;
        plan: import("mongoose").FlattenMaps<import("mongoose").Document<unknown, {}, import("./schema/plan.schema").Plans, {}> & import("./schema/plan.schema").Plans & {
            _id: Types.ObjectId;
        } & {
            __v: number;
        }> & Required<{
            _id: Types.ObjectId;
        }>;
        razorpay?: undefined;
        payment_gateway?: undefined;
    } | {
        razorpay: any;
        amount: number;
        payment_gateway: PaymentGateway.RAZORPAY;
        vehicle_count: number;
        plan: import("mongoose").FlattenMaps<import("mongoose").Document<unknown, {}, import("./schema/plan.schema").Plans, {}> & import("./schema/plan.schema").Plans & {
            _id: Types.ObjectId;
        } & {
            __v: number;
        }> & Required<{
            _id: Types.ObjectId;
        }>;
        updated?: undefined;
        message?: undefined;
    }>;
    expireCancelledSubscriptions(): Promise<void>;
}
