import { CreateCompanyDto } from './dto/create-company.dto';
import { AddCompanyRiderRequestDto, BlockUnblockStaffDto, CreateCompanyStaffDto, DashboardCardDto, GetCompanyStaffQueryDto, ListCompanyBookingDto, ListCompanyDto, OnboardStaffDto, UpdateCompanyDto, UpdateCompanyStaffDto } from './dto/update-company.dto';
import { DbService } from 'src/db/db.service';
import { BillingDuration, CompanyRoleType } from './schema/company.schema';
import { Types } from 'mongoose';
import { CommonService } from 'src/common/common.service';
import { JwtService } from '@nestjs/jwt';
import { StripeService } from 'src/common/helpers/stripe.service';
import { RazorpayService } from 'src/common/helpers/razorpay-helper.service';
import { CashfreeService } from 'src/common/helpers/cashfree-helper.service';
import { Response } from 'express';
import { FlutterwaveService } from 'src/common/helpers/flutterwave-helper.service';
import { MessageKey } from 'src/common/helpers/message-keys.enum';
export declare enum BookingFilterType {
    DAY = "day",
    WEEK = "week",
    MONTH = "month"
}
export declare class CompanyService {
    private readonly model;
    private readonly commonService;
    private readonly jwtService;
    private readonly stripeService;
    private readonly razorpayService;
    private readonly cashfreeService;
    private readonly flutterwaveService;
    constructor(model: DbService, commonService: CommonService, jwtService: JwtService, stripeService: StripeService, razorpayService: RazorpayService, cashfreeService: CashfreeService, flutterwaveService: FlutterwaveService);
    private getDateRange;
    getDashbord: (req: any, dto: DashboardCardDto) => Promise<{
        data: any;
    }>;
    getStartOfDuration(duration: BookingFilterType): number;
    getEndOfDuration(duration: BookingFilterType): number;
    getDashboardCardsCompany(req: any, start_date?: string | number, end_date?: string | number): Promise<{
        data: any;
    }>;
    create(createCompanyDto: CreateCompanyDto): {
        message: MessageKey;
        data: Promise<import("mongoose").Document<unknown, {}, import("./schema/company.schema").Company, {}, {}> & import("./schema/company.schema").Company & {
            _id: Types.ObjectId;
        } & {
            __v: number;
        }>;
    };
    findAll(dto: ListCompanyDto): Promise<{
        message: MessageKey;
        data: (import("mongoose").Document<unknown, {}, import("./schema/company.schema").Company, {}, {}> & import("./schema/company.schema").Company & {
            _id: Types.ObjectId;
        } & {
            __v: number;
        })[];
        pagination: {
            total: number;
            page: string | number;
            limit: string | number;
            totalPages: number;
            activeCount: number;
            blockedCount: number;
            deletedCount: number;
        };
    }>;
    update(id: string, updateCompanyDto: UpdateCompanyDto): Promise<{
        message: MessageKey;
        data: import("mongoose").Document<unknown, {}, import("./schema/company.schema").Company, {}, {}> & import("./schema/company.schema").Company & {
            _id: Types.ObjectId;
        } & {
            __v: number;
        };
    }>;
    request_rider: (req: any, data: AddCompanyRiderRequestDto) => Promise<{
        message: MessageKey;
    }>;
    create_client: (req: any, data: AddCompanyRiderRequestDto) => Promise<{
        message: MessageKey;
    }>;
    createCompanyStaff(req: any, data: CreateCompanyStaffDto): Promise<{
        message: MessageKey;
        data: import("mongoose").Document<unknown, {}, import("./schema/company.schema").Company, {}, {}> & import("./schema/company.schema").Company & {
            _id: Types.ObjectId;
        } & {
            __v: number;
        };
    }>;
    getCompanyStaffList(req: any, query: GetCompanyStaffQueryDto): Promise<{
        message: MessageKey;
        data: (import("mongoose").FlattenMaps<{
            customer_id: string;
            role_type: CompanyRoleType;
            name: string;
            email: string;
            phone: string;
            country_code: string;
            image: string;
            is_email_verify: boolean;
            is_phone_verify: boolean;
            temp_email: string;
            temp_email_otp: number;
            temp_phone_otp: number;
            temp_email_otp_at: number;
            temp_phone: string;
            temp_country_code: string;
            temp_phone_otp_at: number;
            address: string;
            is_notification: boolean;
            timezone: string;
            preferred_currency: string;
            preferred_language: string;
            currency_symbol: string;
            contact_person: string;
            block_reason: string;
            credit_limit_assign?: number;
            credit_limit?: number;
            wallet_balance: number;
            hold_balance: number;
            pending_amount: number;
            billing_duration?: BillingDuration;
            location: {
                type: string;
                coordinates: number[];
                name: string;
            };
            heading: number;
            company_id: string;
            current_booking: string;
            permissions: string[];
            is_block: boolean;
            is_deleted: boolean;
            created_at: number;
            updated_at: number;
        }> & {
            _id: Types.ObjectId;
        } & {
            __v: number;
        })[];
        pagination: {
            total: number;
            page: number;
            limit: number;
            totalPages: number;
        };
    }>;
    getStaffById(id: string): Promise<{
        message: MessageKey;
        data: import("mongoose").FlattenMaps<{
            customer_id: string;
            role_type: CompanyRoleType;
            name: string;
            email: string;
            phone: string;
            country_code: string;
            image: string;
            is_email_verify: boolean;
            is_phone_verify: boolean;
            temp_email: string;
            temp_email_otp: number;
            temp_phone_otp: number;
            temp_email_otp_at: number;
            temp_phone: string;
            temp_country_code: string;
            temp_phone_otp_at: number;
            address: string;
            is_notification: boolean;
            timezone: string;
            preferred_currency: string;
            preferred_language: string;
            currency_symbol: string;
            contact_person: string;
            block_reason: string;
            credit_limit_assign?: number;
            credit_limit?: number;
            wallet_balance: number;
            hold_balance: number;
            pending_amount: number;
            billing_duration?: BillingDuration;
            location: {
                type: string;
                coordinates: number[];
                name: string;
            };
            heading: number;
            company_id: string;
            current_booking: string;
            permissions: string[];
            is_block: boolean;
            is_deleted: boolean;
            created_at: number;
            updated_at: number;
        }> & {
            _id: Types.ObjectId;
        } & {
            __v: number;
        };
    }>;
    updateStaff(id: string, data: UpdateCompanyStaffDto): Promise<{
        message: MessageKey;
        data: import("mongoose").FlattenMaps<{
            customer_id: string;
            role_type: CompanyRoleType;
            name: string;
            email: string;
            phone: string;
            country_code: string;
            image: string;
            is_email_verify: boolean;
            is_phone_verify: boolean;
            temp_email: string;
            temp_email_otp: number;
            temp_phone_otp: number;
            temp_email_otp_at: number;
            temp_phone: string;
            temp_country_code: string;
            temp_phone_otp_at: number;
            address: string;
            is_notification: boolean;
            timezone: string;
            preferred_currency: string;
            preferred_language: string;
            currency_symbol: string;
            contact_person: string;
            block_reason: string;
            credit_limit_assign?: number;
            credit_limit?: number;
            wallet_balance: number;
            hold_balance: number;
            pending_amount: number;
            billing_duration?: BillingDuration;
            location: {
                type: string;
                coordinates: number[];
                name: string;
            };
            heading: number;
            company_id: string;
            current_booking: string;
            permissions: string[];
            is_block: boolean;
            is_deleted: boolean;
            created_at: number;
            updated_at: number;
        }> & {
            _id: Types.ObjectId;
        } & {
            __v: number;
        };
    }>;
    blockUnblockStaff(id: string, data: BlockUnblockStaffDto): Promise<{
        message: MessageKey;
        data: import("mongoose").FlattenMaps<{
            customer_id: string;
            role_type: CompanyRoleType;
            name: string;
            email: string;
            phone: string;
            country_code: string;
            image: string;
            is_email_verify: boolean;
            is_phone_verify: boolean;
            temp_email: string;
            temp_email_otp: number;
            temp_phone_otp: number;
            temp_email_otp_at: number;
            temp_phone: string;
            temp_country_code: string;
            temp_phone_otp_at: number;
            address: string;
            is_notification: boolean;
            timezone: string;
            preferred_currency: string;
            preferred_language: string;
            currency_symbol: string;
            contact_person: string;
            block_reason: string;
            credit_limit_assign?: number;
            credit_limit?: number;
            wallet_balance: number;
            hold_balance: number;
            pending_amount: number;
            billing_duration?: BillingDuration;
            location: {
                type: string;
                coordinates: number[];
                name: string;
            };
            heading: number;
            company_id: string;
            current_booking: string;
            permissions: string[];
            is_block: boolean;
            is_deleted: boolean;
            created_at: number;
            updated_at: number;
        }> & {
            _id: Types.ObjectId;
        } & {
            __v: number;
        };
    }>;
    sendNotificationToStaff(id: string, isBlock: boolean): Promise<void>;
    removeStaff(id: string): Promise<{
        message: MessageKey;
        status: boolean;
    }>;
    getCompanyBookings(req: any, query: ListCompanyBookingDto): Promise<{
        message: MessageKey;
        data: any;
        pagination: {
            total: any;
            page: number;
            limit: number;
            totalPages: number;
        };
    }>;
    getCompanyBookingDetails(req: any, companyId: string): Promise<{
        message: MessageKey;
        data: any;
    }>;
    getInvoices: (req: any, filters: ListCompanyBookingDto) => Promise<{
        message: MessageKey;
        data: any[];
        pagination: {
            total: number;
            page: number;
            limit: number;
            totalPages: number;
        };
    }>;
    getInvoicesForAdmin: (filters: ListCompanyBookingDto) => Promise<{
        message: MessageKey;
        data: any;
        pagination: {
            paidCount: any;
            unpaidCount: any;
            page: number;
            limit: number;
            total: any;
        };
    }>;
    downloadInvoice(invoiceId: string, res: Response): Promise<Response<any, Record<string, any>>>;
    updateCreaditLimitByAdmin: (company_id: string, credit_limit: number) => Promise<{
        message: MessageKey;
        data: import("mongoose").Document<unknown, {}, import("./schema/company.schema").Company, {}, {}> & import("./schema/company.schema").Company & {
            _id: Types.ObjectId;
        } & {
            __v: number;
        };
    }>;
    updateBilingCycleByAdmin: (company_id: string, billing_duration: BillingDuration) => Promise<{
        message: MessageKey;
        data: import("mongoose").Document<unknown, {}, import("./schema/company.schema").Company, {}, {}> & import("./schema/company.schema").Company & {
            _id: Types.ObjectId;
        } & {
            __v: number;
        };
    }>;
    onBoardStaffByPhoneNumber: (req: any, dto: OnboardStaffDto) => Promise<{
        message: MessageKey;
        data: OnboardStaffDto;
        access_token: string;
    }>;
    payOutStandingBill: (req: any) => Promise<{
        amount: number;
        meta: any;
        ref_id: string;
    } | {
        message: string;
        due_amount: number;
        wallet_balance: number;
        credit_limit: number;
        client_secret?: undefined;
        amount?: undefined;
        ephemeralKey?: undefined;
        customer?: undefined;
        order_id?: undefined;
        cf_order_id?: undefined;
        payment_sessions_id?: undefined;
    } | {
        client_secret: string;
        amount: number;
        ephemeralKey: any;
        customer: string;
        message?: undefined;
        due_amount?: undefined;
        wallet_balance?: undefined;
        credit_limit?: undefined;
        order_id?: undefined;
        cf_order_id?: undefined;
        payment_sessions_id?: undefined;
    } | {
        order_id: any;
        amount: any;
        message?: undefined;
        due_amount?: undefined;
        wallet_balance?: undefined;
        credit_limit?: undefined;
        client_secret?: undefined;
        ephemeralKey?: undefined;
        customer?: undefined;
        cf_order_id?: undefined;
        payment_sessions_id?: undefined;
    } | {
        order_id: any;
        cf_order_id: any;
        payment_sessions_id: any;
        amount: any;
        message?: undefined;
        due_amount?: undefined;
        wallet_balance?: undefined;
        credit_limit?: undefined;
        client_secret?: undefined;
        ephemeralKey?: undefined;
        customer?: undefined;
    }>;
    payInvoiceBill: (req: any, invoice_id: string) => Promise<{
        amount: number;
        meta: any;
        ref_id: string;
    } | {
        message: string;
        due_amount: number;
        wallet_balance: number;
        credit_limit: number;
        client_secret?: undefined;
        amount?: undefined;
        ephemeralKey?: undefined;
        customer?: undefined;
        order_id?: undefined;
        cf_order_id?: undefined;
        payment_sessions_id?: undefined;
    } | {
        client_secret: string;
        amount: number;
        ephemeralKey: any;
        customer: string;
        message?: undefined;
        due_amount?: undefined;
        wallet_balance?: undefined;
        credit_limit?: undefined;
        order_id?: undefined;
        cf_order_id?: undefined;
        payment_sessions_id?: undefined;
    } | {
        order_id: any;
        amount: any;
        message?: undefined;
        due_amount?: undefined;
        wallet_balance?: undefined;
        credit_limit?: undefined;
        client_secret?: undefined;
        ephemeralKey?: undefined;
        customer?: undefined;
        cf_order_id?: undefined;
        payment_sessions_id?: undefined;
    } | {
        order_id: any;
        cf_order_id: any;
        payment_sessions_id: any;
        amount: any;
        message?: undefined;
        due_amount?: undefined;
        wallet_balance?: undefined;
        credit_limit?: undefined;
        client_secret?: undefined;
        ephemeralKey?: undefined;
        customer?: undefined;
    }>;
    getBookingsByInvoice(req: any, query: ListCompanyBookingDto, invoice_id: string): Promise<{
        message: MessageKey;
        data: any;
        pagination: {
            total: any;
            page: number;
            limit: number;
            totalPages: number;
        };
    }>;
}
