import { ConfigService } from "@nestjs/config";
import { DataSource, Repository } from "typeorm";
import { UserLoginRepository } from "../../auth/repositories/user-login.repository";
import { CityRepository } from "../../city/repositories/city.repository";
import { ClientCompanyContactRepository } from "../../client-company-contacts/repositories/client-company-contacts.repository";
import { ClientCompanyRepository } from "../../clients-companies/repositories/clients-companies.repository";
import { CountryRepository } from "../../country/repositories/country.repository";
import { CustomerTag } from "../../customers-tags/entities/customer_tags.entity";
import { CustomerTagRepository } from "../../customers-tags/repositories/customer_tags.repository";
import { HospitalRepository } from "../../hospitals/repositories/hospital.repository";
import { NotificationService } from "../../notification/v1/notification.service";
import { RatingRepository } from "../../rating/repositories/rating.repository";
import { RoleRepository } from "../../role/repositories/role.repository";
import { StateRepository } from "../../state/repositories/state.repository";
import { TeamMemberRepository } from "../../team-member/repositories/team_member.repository";
import { VehicleRepository } from "../../vehicle-type/repositories/vehicle-type.repository";
import { CreateCustomerDto } from "../dto/create-customer.dto";
import { SaveCustomerPhoneNumbersDto } from "../dto/customer-phone-numbers.dto";
import { FilterCustomerDto } from "../dto/filter-customer.dto";
import { UpdateCustomerDto } from "../dto/update-customer.dto";
import { AssignPricingCityByDispatcherDto } from "../dto/assign-pricing-city-by-dispatcher.dto";
import { CustomerPhoneNumbers } from "../entities/customer_phone_number.entity";
import { CustomerRepository } from "../repositories/customers.repository";
import { PhoneNumbersRepository } from "../repositories/phone-numbers.repository";
import { CustomerMobileLoginDto } from "../dto/create-customer-mobile-login.dto";
import { CustomerLoginRepository } from "../repositories/customer-login.repository";
import { CustomerLogin } from "../entities/customer_login.entity";
import { CreateCustomerEpisodeDto } from "../dto/customer-episode/create-customer-episode.dto";
import { UpdateCustomerEpisodeDto } from "../dto/customer-episode/update-customer-episode.dto";
import { CreateEpisodeLogDto } from "../dto/episode-log/create-episode-log.dto";
import { UpdateEpisodeLogDto } from "../dto/episode-log/update-episode-log.dto";
import { GenerateUploadUrlDto } from "../dto/episode-log/generate-upload-url.dto";
import { CustomerEpisode } from "../entities/customer_episode.entity";
import { CustomerEpisodeRepository } from "../repositories/customer-episode.repository";
import { EpisodeLogRepository } from "../repositories/episode-log.repository";
import { CloudflareR2Service } from "../../../utils/cloudflare-r2.service";
import { EpisodeLog } from "../entities/episode_log.entity";
import { TripLog } from "../../trips/entities/trip-logs.entity";
import * as ExcelJS from "exceljs";
import { Trip } from "../../trips/entities/trip.entity";
export declare class CustomersService {
    private readonly customerRepository;
    private readonly clientCompanyRepository;
    private readonly clientContactRepository;
    private readonly cityRepository;
    private readonly stateRepository;
    private readonly countryRepository;
    private readonly hospitalRepository;
    private readonly tagRepository;
    private readonly configService;
    private readonly teamRepository;
    private readonly roleRepository;
    private readonly customerPhoneNumberRepository;
    private readonly userLoginRepository;
    private readonly ratingRepository;
    private readonly vehicleTypeRepository;
    private readonly notificationService;
    private readonly customerLoginRepository;
    private readonly customerEpisodeRepository;
    private readonly episodeLogRepository;
    private readonly cloudflareR2Service;
    private dataSource;
    private readonly customerPhoneNumberModuleRepository;
    private readonly EpisodeLogEntityRepository;
    private readonly CustomerEpisodeEntityRepository;
    private readonly tripLogEntityRepository;
    private readonly tripEntityRepository;
    constructor(customerRepository: CustomerRepository, clientCompanyRepository: ClientCompanyRepository, clientContactRepository: ClientCompanyContactRepository, cityRepository: CityRepository, stateRepository: StateRepository, countryRepository: CountryRepository, hospitalRepository: HospitalRepository, tagRepository: CustomerTagRepository, configService: ConfigService, teamRepository: TeamMemberRepository, roleRepository: RoleRepository, customerPhoneNumberRepository: PhoneNumbersRepository, userLoginRepository: UserLoginRepository, ratingRepository: RatingRepository, vehicleTypeRepository: VehicleRepository, notificationService: NotificationService, customerLoginRepository: CustomerLoginRepository, customerEpisodeRepository: CustomerEpisodeRepository, episodeLogRepository: EpisodeLogRepository, cloudflareR2Service: CloudflareR2Service, dataSource: DataSource, customerPhoneNumberModuleRepository: Repository<CustomerPhoneNumbers>, EpisodeLogEntityRepository: Repository<EpisodeLog>, CustomerEpisodeEntityRepository: Repository<CustomerEpisode>, tripLogEntityRepository: Repository<TripLog>, tripEntityRepository: Repository<Trip>);
    create(createCustomerDto: CreateCustomerDto): Promise<{
        success: boolean;
        code: number;
        message: string;
    }>;
    backfillPlaceIds(): Promise<{
        success: boolean;
        code: number;
        message: string;
        data: any;
    }>;
    assignPricingCityByDispatcher(dto: AssignPricingCityByDispatcherDto): Promise<{
        success: boolean;
        code: number;
        message: string;
    }>;
    findAll(token: any, filterCustomerDto: FilterCustomerDto): Promise<{
        success: boolean;
        code: number;
        message: string;
        data: any;
    }>;
    findOne(id: number, isCustomer: boolean): Promise<{
        success: boolean;
        code: number;
        message: string;
    }>;
    update(id: number, updateCustomerDto: UpdateCustomerDto, files?: {
        profile_photo?: Express.Multer.File;
        letter_of_guarantee?: Express.Multer.File;
    }, isCustomer?: boolean): Promise<{
        success: boolean;
        code: number;
        message: string;
    }>;
    getStepWisePayload(step: number, dto: UpdateCustomerDto, files?: {
        profile_photo?: Express.Multer.File;
        letter_of_guarantee?: Express.Multer.File;
    }): Promise<any>;
    remove(id: number): Promise<{
        success: boolean;
        code: number;
        message: string;
    }>;
    checkTagExist(name: any, type: any): Promise<boolean>;
    createTag(tagData: CustomerTag): Promise<void>;
    getTags(type: any): Promise<number | CustomerTag | CustomerTag[] | import("../../../common/interfaces/pagination-result.interface").PaginatedResult<CustomerTag>>;
    getPhoneNumbers(customer_id: number): Promise<{
        success: boolean;
        code: number;
        message: string;
    }>;
    updatePhoneNumber(customer_id: number, phoneNumberDto: SaveCustomerPhoneNumbersDto): Promise<{
        success: boolean;
        code: number;
        message: string;
    }>;
    getRating(customerId: number): Promise<{
        success: boolean;
        code: number;
        message: string;
    }>;
    generateRandomString(length: number): string;
    generateToken(): string;
    generateRefreshToken(): string;
    private getRefreshTokenExpiry;
    getCustomerByToken(token: string): Promise<CustomerLogin | null>;
    customerMobileLogin(username: CustomerMobileLoginDto): Promise<{
        success: boolean;
        code: number;
        message: string;
    }>;
    verifyOtp(otp: string, user_id: number, fcm_token?: string): Promise<{
        success: boolean;
        code: number;
        message: string;
    }>;
    customerLogout(token: string): Promise<{
        success: boolean;
        code: number;
        message: string;
    }>;
    refreshCustomerAccessToken(refreshToken: string): Promise<{
        success: boolean;
        code: number;
        message: string;
    }>;
    createCustomerEpisode(customerId: number, createCustomerEpisodeDto: CreateCustomerEpisodeDto): Promise<{
        success: boolean;
        code: number;
        message: string;
    }>;
    findAllCustomerEpisodes(customerId: number): Promise<{
        success: boolean;
        code: number;
        message: string;
    }>;
    endCustomerEpisode(episodeId: number): Promise<{
        success: boolean;
        code: number;
        message: string;
    }>;
    findOneCustomerEpisode(episodeId: number): Promise<{
        success: boolean;
        code: number;
        message: string;
    }>;
    updateCustomerEpisode(episodeId: number, updateCustomerEpisodeDto: UpdateCustomerEpisodeDto): Promise<{
        success: boolean;
        code: number;
        message: string;
    }>;
    removeCustomerEpisode(episodeId: number): Promise<{
        success: boolean;
        code: number;
        message: string;
    }>;
    generateEpisodeLogUploadUrl(episodeId: number, generateUploadUrlDto: GenerateUploadUrlDto): Promise<{
        success: boolean;
        code: number;
        message: string;
    }>;
    checkEpisodeLogExist(logNumber?: string, referenceNumber?: string, excludeLogId?: number): Promise<boolean>;
    createEpisodeLog(episodeId: number, createEpisodeLogDto: CreateEpisodeLogDto): Promise<{
        success: boolean;
        code: number;
        message: string;
    }>;
    findAllEpisodeLogs(episodeId: number): Promise<{
        success: boolean;
        code: number;
        message: string;
    }>;
    findOneEpisodeLog(logId: number): Promise<{
        success: boolean;
        code: number;
        message: string;
    }>;
    updateEpisodeLog(logId: number, updateEpisodeLogDto: UpdateEpisodeLogDto): Promise<{
        success: boolean;
        code: number;
        message: string;
    }>;
    removeEpisodeLog(logId: number): Promise<{
        success: boolean;
        code: number;
        message: string;
    }>;
    getActiveEpisodeWithLogs(customerId: number, skip?: number, limit?: number, search?: string): Promise<{
        success: boolean;
        code: number;
        message: string;
        data: any;
    }>;
    checkEpisodeInvoiceStatus(episodeId: any): Promise<{
        success: boolean;
        code: number;
        message: string;
    }>;
    private hasUninvoicedTrips;
    bulkUpload(file: any): Promise<ExcelJS.Buffer | {
        success: boolean;
        message: string;
    }>;
}
