import { Data } from '@angular/router';
import { Subject, Observable, Subscription, BehaviorSubject, ReplaySubject } from 'rxjs';
import { HttpClient } from '@angular/common/http';
import { NsContent } from '../_services/widget-content.model';
import { WidgetContentService } from '../_services/widget-content.service';
import { NsAppToc, NsCohorts } from '../models/app-toc.model';
import { TFetchStatus, ConfigurationsService } from '@sunbird-cb/utils-v2';
import { ContentLanguageService } from '@sunbird-cb/consumption';
import * as i0 from "@angular/core";
export declare class AppTocService {
    private http;
    private contentLangSvc;
    private configSvc;
    private widgetSvc;
    analyticsReplaySubject: Subject<any>;
    analyticsFetchStatus: TFetchStatus;
    batchReplaySubject: Subject<any>;
    setBatchDataSubject: Subject<any>;
    getSelectedBatch: Subject<any>;
    /**
     * Helper function to ensure completionStatus is always a number
     * Converts string values to 0 and ensures valid number range (0, 1, 2)
     */
    private safeCompletionStatus;
    setWFDataSubject: Subject<any>;
    resumeData: Subject<NsContent.IContinueLearningData | null>;
    private showSubtitleOnBanners;
    private canShowDescription;
    resumeDataSubscription: Subscription | null;
    primaryCategory: typeof NsContent.EPrimaryCategory;
    private updateReviews;
    updateReviewsObservable: Observable<boolean>;
    serverDate: BehaviorSubject<string>;
    currentServerDate: Observable<string>;
    contentLoader: BehaviorSubject<boolean>;
    contentLoader$: Observable<boolean>;
    getPageScroll: BehaviorSubject<boolean>;
    updatePageScroll: Observable<boolean>;
    hashmap: any;
    private currentRootContentId;
    hashmapUpdated: BehaviorSubject<any>;
    hashmapUpdated$: Observable<any>;
    private transriptionDataSubject;
    transcriptionData$: Observable<any>;
    transriptionActiveLanguageDataObject: BehaviorSubject<any>;
    transriptionActiveLanguageDataObject$: Observable<any>;
    transriptionIdentifier: Subject<unknown>;
    changeTranscriptionLanguageEvent: ReplaySubject<unknown>;
    playTranscriptionVideo: Subject<unknown>;
    constructor(http: HttpClient, contentLangSvc: ContentLanguageService, configSvc: ConfigurationsService, widgetSvc: WidgetContentService);
    get subtitleOnBanners(): boolean;
    set subtitleOnBanners(val: boolean);
    get showDescription(): boolean;
    set showDescription(val: boolean);
    updateBatchData(): void;
    setBatchData(data: NsContent.IBatchListResponse): void;
    setWFData(data: any): void;
    updateResumaData(data: any): void;
    changeUpdateReviews(state: boolean): void;
    getSelectedBatchData(data: any): void;
    changeServerDate(state: any): void;
    mapSessionCompletionPercentage(batchData: any, resumeDataPass?: any): void;
    sessionCompletionPercentage(batchData: any, resumeDataPass: any): void;
    showStartButton(content: NsContent.IContent | null): {
        show: boolean;
        msg: string;
    };
    initData(data: Data, needResumeData?: boolean): NsAppToc.IWsTocResponse;
    mapCompletionPercentage(content: NsContent.IContent | null, dataResult: any): void;
    mapModuleCount(content: NsContent.IContent): void;
    getMimeType(content: NsContent.IContent, identifier: string): NsContent.EMimeTypes;
    getTocStructure(content: NsContent.IContent, tocStructure: NsAppToc.ITocStructure): NsAppToc.ITocStructure;
    filterToc(content: NsContent.IContent, filterCategory?: NsContent.EFilterCategory): NsContent.IContent | null;
    filterUnitContent(content: NsContent.IContent, filterCategory?: NsContent.EFilterCategory): boolean;
    fetchContentAnalyticsClientData(contentId: string): void;
    private getContentAnalyticsClient;
    fetchContentAnalyticsData(contentId: string): void;
    private getContentAnalytics;
    clearAnalyticsData(): void;
    /**
     * Reset hashmap and related content data
     * Call this when navigating away from content to prevent stale data
     */
    resetContentData(): void;
    fetchContentParents(contentId: string): Observable<NsContent.IContentMinimal[]>;
    fetchContentWhatsNext(contentId: string, contentType?: string): Observable<NsContent.IContentMinimal[]>;
    fetchMoreLikeThisPaid(contentId: string): Observable<NsContent.IContentMinimal[]>;
    fetchMoreLikeThisFree(contentId: string): Observable<NsContent.IContentMinimal[]>;
    fetchContentCohorts(cohortType: NsCohorts.ECohortTypes, contentId: string): Observable<NsCohorts.ICohortsContent[]>;
    fetchExternalContentAccess(contentId: string): Observable<{
        hasAccess: boolean;
    }>;
    fetchCohortGroupUsers(groupId: number): Observable<NsCohorts.ICohortsGroupUsers[]>;
    fetchMoreLikeThis(contentId: string, contentType: string): Observable<any>;
    fetchPostAssessmentStatus(contentId: string): Observable<{
        result: NsAppToc.IPostAssessment[];
    }>;
    fetchGetContentData(contentId: string): Observable<{
        result: any;
    }>;
    fetchContentParent(contentId: string, data: NsAppToc.IContentParentReq, forPreview?: boolean): Observable<NsAppToc.IContentParentResponse>;
    createBatch(batchData: any): Observable<Object>;
    mapCompletionPercentageProgram(content: NsContent.IContent | null, enrolmentList: any, collectionId?: string): Promise<void>;
    checkCompletedLeafnodes(leafNodes: any, completedCount: any): void;
    findEnrolmentByCollectionId(enrolmentList: any, identifier: string): any;
    mapCompletionChildPercentageProgram(course: any): Promise<void>;
    mapModuleDurationAndProgress(content: NsContent.IContent | null, parent: NsContent.IContent | null): void;
    createHirarchyProgressHashmap(hierarchyData: NsContent.IContent, rootCourseCategory?: string, parentId?: string): void;
    createPreAssessmentHirarchyProgressHashmap(hierarchyData: NsContent.IContent): void;
    callHirarchyProgressHashmap(hierarchyData: NsContent.IContent | null): void;
    computeMilestoneLockingStatus(isEnrolled?: boolean): void;
    /**
     * Trigger milestone lock update when hashmap progress is updated externally
     * Called from viewer-util.service.ts after progress updates
     */
    triggerMilestoneLockUpdate(): void;
    /**
     * Check if pre-assessment (preliminary assessment) is completed
     * Pre-assessment is typically a Course Assessment at the root level of Learning Pathway (before milestones)
     */
    private checkPreAssessmentCompletion;
    /**
     * Check if a milestone's assessment is completed
     * ONLY checks the milestone assessment (Course Assessment that is a direct child of the milestone)
     * Does NOT check assessments nested inside courses within the milestone
     */
    private checkMilestoneAssessmentComplete;
    /**
     * Check if a milestone's mandatory content is completed
     * Only checks courses/content that are marked as isMandatory
     */
    private checkMilestoneMandatoryContentComplete;
    /**
     * Check if a content item is a child (direct or nested) of a milestone
     */
    private isChildOfMilestone;
    /**
     * Compute assessment locking within an unlocked milestone
     * Assessment locks until all mandatory courses in the milestone are completed
     */
    private computeAssessmentLockingInMilestone;
    /**
     * Mark all children of a milestone as parent-locked or unlocked
     */
    private markMilestoneChildrenAsParentLocked;
    /**
     * Recursively mark nested children as parent-locked
     */
    private markNestedChildrenAsParentLocked;
    getCalculationsFromChildren(item: NsContent.IContent): NsContent.IContent;
    fetchContentHistoryV2(req: NsContent.IContinueLearningDataReq): Observable<NsContent.IContinueLearningData>;
    dowonloadCertificate(certId: any): Observable<any>;
    getServerDate(): Observable<{
        result: NsAppToc.IPostAssessment[];
    }>;
    getFormById(formId: string): Observable<Object>;
    submitForm(formData: any): Observable<any>;
    getFormByIdPublic(formId: string): Observable<Object>;
    submitFormPublic(formData: any): Observable<any>;
    getApllicationsById(formId: string, contextId: string): Observable<any>;
    shareContent(reqBody: any): Observable<any>;
    checkModuleWiseData(content: any): void;
    fetchCourseHeirarchy(contentData: any): Promise<void>;
    setTranscriptionData(data: any): void;
    setActiveSubtitleLanguage(activeLang: any): void;
    aiGetResourceVttFile(resourceID: any): Observable<any>;
    readPreEnrollmentResourcesState(req: any): Observable<Object>;
    createContentV2(requestBody: any): Observable<any>;
    uploadAssignmentAnswer(contentId: string, batchId: string, assignmentId: string, file: File): Observable<any>;
    readContentV2(id: string): Observable<any>;
    upload(data: FormData, contentData: any, options?: any): Observable<any>;
    appendToFilename(filename: string): string;
    updateContentWithFewFields(requestBody: any, identifier: string): Observable<any>;
    searchAssignments(request: any): Observable<any>;
    submitDraftAssignment(request: any): Observable<any>;
    submitAssignment(request: any): Observable<any>;
    notifyAssignmentSubmission(payload: any): Observable<any>;
    getAssignmentStatus(request: any): Observable<any>;
    readAssignmentFile(contentId: string, batchId: string, assignmentId: string, fileName: string): Observable<any>;
    /**
     * Generate milestone achievement
     * @param userId User ID
     * @param courseId Course identifier
     * @param batchId Batch ID
     * @param milestoneId Milestone identifier (e.g., 'm1', 'm2')
     */
    generateMilestoneAchievement(userId: string, courseId: string, batchId: string, milestoneId: string): Observable<any>;
    static ɵfac: i0.ɵɵFactoryDeclaration<AppTocService, never>;
    static ɵprov: i0.ɵɵInjectableDeclaration<AppTocService>;
}
//# sourceMappingURL=app-toc.service.d.ts.map