import { OnModuleInit } from '@nestjs/common';
import { Prisma } from '@prisma/client';
import { AiService } from '../common/ai/ai.service';
import { AppLogger } from '../common/logger/app-logger.service';
import { PrismaService } from '../common/prisma/prisma.service';
import { QueueService } from '../common/queue/queue.service';
import { StorageService } from '../common/storage/storage.service';
import { AnswerInterviewDto, ChecklistDto, ConfigureInterviewDto, MockStartDto, SetupInterviewDto } from './dto/interview.dto';
export declare class InterviewCoachService implements OnModuleInit {
    private readonly prisma;
    private readonly ai;
    private readonly queue;
    private readonly storage;
    private readonly logger;
    constructor(prisma: PrismaService, ai: AiService, queue: QueueService, storage: StorageService, logger: AppLogger);
    onModuleInit(): Promise<void>;
    seedPromptTemplates(): Promise<void>;
    backfillJobCodes(): Promise<void>;
    setup(userId: string, dto: SetupInterviewDto): Promise<{
        id: string;
        roleTitle: string;
        companyName: string | null;
        jobId: string | null;
        publicCode: string | null;
        job: string | number | boolean | Prisma.JsonObject | Prisma.JsonArray | {
            publicCode: string | null;
            description: string | null;
            id: string;
            title: string;
            companyName: string | null;
            city: string | null;
            region: string | null;
            postcode: string | null;
            workMode: import(".prisma/client").$Enums.WorkMode | null;
            employmentType: import(".prisma/client").$Enums.EmploymentType | null;
            experienceLevel: import(".prisma/client").$Enums.ExperienceLevel | null;
            salaryMin: number | null;
            salaryMax: number | null;
            currency: string | null;
            salaryPeriod: import(".prisma/client").$Enums.SalaryPeriod | null;
            category: string | null;
            locationText: string | null;
            sponsorsVisa: boolean;
            perkLabel: string | null;
            isDemo: boolean;
            publishedAt: Date | null;
            applicationUrl: string | null;
            source: string;
            sourceDisplay: string;
            applyMethod: import("../jobs/apply-route").ApplyMethod;
        } | null;
        analysis: {
            summary: {} | null;
            skills: string[];
            responsibilities: string[];
            likelyCategories: string[];
            readinessHints: string[];
            companyPrep: {} | null;
        };
        interviewType: string | null;
        interviewStage: string | null;
        interviewFormat: string | null;
        platform: string | null;
        scheduledAt: Date | null;
        difficulty: string | null;
        confidence: string | null;
        goals: Prisma.JsonValue;
        persona: string;
        mode: string;
        resumeId: string | null;
        readinessScore: number | null;
        overallScore: number | null;
        status: string;
        progress: Prisma.JsonValue;
        checklist: string | number | boolean | Prisma.JsonObject | Prisma.JsonArray | {
            id: string;
            label: string;
            done: boolean;
        }[];
        notes: string | null;
        audioConsentAt: Date | null;
        plan: string | number | boolean | Prisma.JsonObject | Prisma.JsonArray | null;
        topics: {
            id: string;
            topic: string;
            category: string;
            importance: number;
            score: number | null;
        }[];
        questions: {
            id: string;
            prompt: string;
            category: string;
            difficulty: string;
            topic: string | null;
            status: string;
            isFollowUp: boolean;
            parentQuestionId: string | null;
            estimatedSeconds: number | null;
            sortOrder: number;
            attempts: number;
            latestScore: number | null;
        }[];
        progressCounts: {
            answered: number;
            total: number;
        };
        report: {
            overallScore: number;
        } | null;
        createdAt: Date;
        updatedAt: Date;
    }>;
    searchJobs(userId: string, q?: string): Promise<{
        items: {
            publicCode: string | null;
            skills: string[];
            bookmarked: boolean;
            applied: boolean;
            applicationStatus: import(".prisma/client").$Enums.ApplicationStatus;
            id: string;
            title: string;
            companyName: string | null;
            city: string | null;
            region: string | null;
            postcode: string | null;
            workMode: import(".prisma/client").$Enums.WorkMode | null;
            employmentType: import(".prisma/client").$Enums.EmploymentType | null;
            experienceLevel: import(".prisma/client").$Enums.ExperienceLevel | null;
            salaryMin: number | null;
            salaryMax: number | null;
            currency: string | null;
            salaryPeriod: import(".prisma/client").$Enums.SalaryPeriod | null;
            category: string | null;
            locationText: string | null;
            sponsorsVisa: boolean;
            perkLabel: string | null;
            isDemo: boolean;
            publishedAt: Date | null;
            applicationUrl: string | null;
            source: string;
            sourceDisplay: string;
            applyMethod: import("../jobs/apply-route").ApplyMethod;
        }[];
    }>;
    getByCode(code: string): Promise<{
        publicCode: string | null;
        description: string | null;
        skills: string[];
        id: string;
        title: string;
        companyName: string | null;
        city: string | null;
        region: string | null;
        postcode: string | null;
        workMode: import(".prisma/client").$Enums.WorkMode | null;
        employmentType: import(".prisma/client").$Enums.EmploymentType | null;
        experienceLevel: import(".prisma/client").$Enums.ExperienceLevel | null;
        salaryMin: number | null;
        salaryMax: number | null;
        currency: string | null;
        salaryPeriod: import(".prisma/client").$Enums.SalaryPeriod | null;
        category: string | null;
        locationText: string | null;
        sponsorsVisa: boolean;
        perkLabel: string | null;
        isDemo: boolean;
        publishedAt: Date | null;
        applicationUrl: string | null;
        source: string;
        sourceDisplay: string;
        applyMethod: import("../jobs/apply-route").ApplyMethod;
    }>;
    applications(userId: string): Promise<{
        applications: {
            id: string;
            status: import(".prisma/client").$Enums.ApplicationStatus;
            updatedAt: Date;
            job: {
                publicCode: string | null;
                id: string;
                title: string;
                companyName: string | null;
                city: string | null;
                region: string | null;
                postcode: string | null;
                workMode: import(".prisma/client").$Enums.WorkMode | null;
                employmentType: import(".prisma/client").$Enums.EmploymentType | null;
                experienceLevel: import(".prisma/client").$Enums.ExperienceLevel | null;
                salaryMin: number | null;
                salaryMax: number | null;
                currency: string | null;
                salaryPeriod: import(".prisma/client").$Enums.SalaryPeriod | null;
                category: string | null;
                locationText: string | null;
                sponsorsVisa: boolean;
                perkLabel: string | null;
                isDemo: boolean;
                publishedAt: Date | null;
                applicationUrl: string | null;
                source: string;
                sourceDisplay: string;
                applyMethod: import("../jobs/apply-route").ApplyMethod;
            };
        }[];
        saved: {
            publicCode: string | null;
            id: string;
            title: string;
            companyName: string | null;
            city: string | null;
            region: string | null;
            postcode: string | null;
            workMode: import(".prisma/client").$Enums.WorkMode | null;
            employmentType: import(".prisma/client").$Enums.EmploymentType | null;
            experienceLevel: import(".prisma/client").$Enums.ExperienceLevel | null;
            salaryMin: number | null;
            salaryMax: number | null;
            currency: string | null;
            salaryPeriod: import(".prisma/client").$Enums.SalaryPeriod | null;
            category: string | null;
            locationText: string | null;
            sponsorsVisa: boolean;
            perkLabel: string | null;
            isDemo: boolean;
            publishedAt: Date | null;
            applicationUrl: string | null;
            source: string;
            sourceDisplay: string;
            applyMethod: import("../jobs/apply-route").ApplyMethod;
        }[];
    }>;
    configure(userId: string, sessionId: string, dto: ConfigureInterviewDto): Promise<{
        id: string;
        roleTitle: string;
        companyName: string | null;
        jobId: string | null;
        publicCode: string | null;
        job: string | number | boolean | Prisma.JsonObject | Prisma.JsonArray | {
            publicCode: string | null;
            description: string | null;
            id: string;
            title: string;
            companyName: string | null;
            city: string | null;
            region: string | null;
            postcode: string | null;
            workMode: import(".prisma/client").$Enums.WorkMode | null;
            employmentType: import(".prisma/client").$Enums.EmploymentType | null;
            experienceLevel: import(".prisma/client").$Enums.ExperienceLevel | null;
            salaryMin: number | null;
            salaryMax: number | null;
            currency: string | null;
            salaryPeriod: import(".prisma/client").$Enums.SalaryPeriod | null;
            category: string | null;
            locationText: string | null;
            sponsorsVisa: boolean;
            perkLabel: string | null;
            isDemo: boolean;
            publishedAt: Date | null;
            applicationUrl: string | null;
            source: string;
            sourceDisplay: string;
            applyMethod: import("../jobs/apply-route").ApplyMethod;
        } | null;
        analysis: {
            summary: {} | null;
            skills: string[];
            responsibilities: string[];
            likelyCategories: string[];
            readinessHints: string[];
            companyPrep: {} | null;
        };
        interviewType: string | null;
        interviewStage: string | null;
        interviewFormat: string | null;
        platform: string | null;
        scheduledAt: Date | null;
        difficulty: string | null;
        confidence: string | null;
        goals: Prisma.JsonValue;
        persona: string;
        mode: string;
        resumeId: string | null;
        readinessScore: number | null;
        overallScore: number | null;
        status: string;
        progress: Prisma.JsonValue;
        checklist: string | number | boolean | Prisma.JsonObject | Prisma.JsonArray | {
            id: string;
            label: string;
            done: boolean;
        }[];
        notes: string | null;
        audioConsentAt: Date | null;
        plan: string | number | boolean | Prisma.JsonObject | Prisma.JsonArray | null;
        topics: {
            id: string;
            topic: string;
            category: string;
            importance: number;
            score: number | null;
        }[];
        questions: {
            id: string;
            prompt: string;
            category: string;
            difficulty: string;
            topic: string | null;
            status: string;
            isFollowUp: boolean;
            parentQuestionId: string | null;
            estimatedSeconds: number | null;
            sortOrder: number;
            attempts: number;
            latestScore: number | null;
        }[];
        progressCounts: {
            answered: number;
            total: number;
        };
        report: {
            overallScore: number;
        } | null;
        createdAt: Date;
        updatedAt: Date;
    }>;
    generate(userId: string, sessionId: string): Promise<{
        id: string;
        roleTitle: string;
        companyName: string | null;
        jobId: string | null;
        publicCode: string | null;
        job: string | number | boolean | Prisma.JsonObject | Prisma.JsonArray | {
            publicCode: string | null;
            description: string | null;
            id: string;
            title: string;
            companyName: string | null;
            city: string | null;
            region: string | null;
            postcode: string | null;
            workMode: import(".prisma/client").$Enums.WorkMode | null;
            employmentType: import(".prisma/client").$Enums.EmploymentType | null;
            experienceLevel: import(".prisma/client").$Enums.ExperienceLevel | null;
            salaryMin: number | null;
            salaryMax: number | null;
            currency: string | null;
            salaryPeriod: import(".prisma/client").$Enums.SalaryPeriod | null;
            category: string | null;
            locationText: string | null;
            sponsorsVisa: boolean;
            perkLabel: string | null;
            isDemo: boolean;
            publishedAt: Date | null;
            applicationUrl: string | null;
            source: string;
            sourceDisplay: string;
            applyMethod: import("../jobs/apply-route").ApplyMethod;
        } | null;
        analysis: {
            summary: {} | null;
            skills: string[];
            responsibilities: string[];
            likelyCategories: string[];
            readinessHints: string[];
            companyPrep: {} | null;
        };
        interviewType: string | null;
        interviewStage: string | null;
        interviewFormat: string | null;
        platform: string | null;
        scheduledAt: Date | null;
        difficulty: string | null;
        confidence: string | null;
        goals: Prisma.JsonValue;
        persona: string;
        mode: string;
        resumeId: string | null;
        readinessScore: number | null;
        overallScore: number | null;
        status: string;
        progress: Prisma.JsonValue;
        checklist: string | number | boolean | Prisma.JsonObject | Prisma.JsonArray | {
            id: string;
            label: string;
            done: boolean;
        }[];
        notes: string | null;
        audioConsentAt: Date | null;
        plan: string | number | boolean | Prisma.JsonObject | Prisma.JsonArray | null;
        topics: {
            id: string;
            topic: string;
            category: string;
            importance: number;
            score: number | null;
        }[];
        questions: {
            id: string;
            prompt: string;
            category: string;
            difficulty: string;
            topic: string | null;
            status: string;
            isFollowUp: boolean;
            parentQuestionId: string | null;
            estimatedSeconds: number | null;
            sortOrder: number;
            attempts: number;
            latestScore: number | null;
        }[];
        progressCounts: {
            answered: number;
            total: number;
        };
        report: {
            overallScore: number;
        } | null;
        createdAt: Date;
        updatedAt: Date;
    }>;
    runGenerate(userId: string, sessionId: string): Promise<{
        id: string;
        roleTitle: string;
        companyName: string | null;
        jobId: string | null;
        publicCode: string | null;
        job: string | number | boolean | Prisma.JsonObject | Prisma.JsonArray | {
            publicCode: string | null;
            description: string | null;
            id: string;
            title: string;
            companyName: string | null;
            city: string | null;
            region: string | null;
            postcode: string | null;
            workMode: import(".prisma/client").$Enums.WorkMode | null;
            employmentType: import(".prisma/client").$Enums.EmploymentType | null;
            experienceLevel: import(".prisma/client").$Enums.ExperienceLevel | null;
            salaryMin: number | null;
            salaryMax: number | null;
            currency: string | null;
            salaryPeriod: import(".prisma/client").$Enums.SalaryPeriod | null;
            category: string | null;
            locationText: string | null;
            sponsorsVisa: boolean;
            perkLabel: string | null;
            isDemo: boolean;
            publishedAt: Date | null;
            applicationUrl: string | null;
            source: string;
            sourceDisplay: string;
            applyMethod: import("../jobs/apply-route").ApplyMethod;
        } | null;
        analysis: {
            summary: {} | null;
            skills: string[];
            responsibilities: string[];
            likelyCategories: string[];
            readinessHints: string[];
            companyPrep: {} | null;
        };
        interviewType: string | null;
        interviewStage: string | null;
        interviewFormat: string | null;
        platform: string | null;
        scheduledAt: Date | null;
        difficulty: string | null;
        confidence: string | null;
        goals: Prisma.JsonValue;
        persona: string;
        mode: string;
        resumeId: string | null;
        readinessScore: number | null;
        overallScore: number | null;
        status: string;
        progress: Prisma.JsonValue;
        checklist: string | number | boolean | Prisma.JsonObject | Prisma.JsonArray | {
            id: string;
            label: string;
            done: boolean;
        }[];
        notes: string | null;
        audioConsentAt: Date | null;
        plan: string | number | boolean | Prisma.JsonObject | Prisma.JsonArray | null;
        topics: {
            id: string;
            topic: string;
            category: string;
            importance: number;
            score: number | null;
        }[];
        questions: {
            id: string;
            prompt: string;
            category: string;
            difficulty: string;
            topic: string | null;
            status: string;
            isFollowUp: boolean;
            parentQuestionId: string | null;
            estimatedSeconds: number | null;
            sortOrder: number;
            attempts: number;
            latestScore: number | null;
        }[];
        progressCounts: {
            answered: number;
            total: number;
        };
        report: {
            overallScore: number;
        } | null;
        createdAt: Date;
        updatedAt: Date;
    }>;
    listSessions(userId: string): Promise<{
        items: {
            id: string;
            roleTitle: string;
            companyName: string | null;
            status: string;
            readinessScore: number | null;
            overallScore: number | null;
            scheduledAt: Date | null;
            updatedAt: Date;
            questionCount: number;
        }[];
    }>;
    getSession(userId: string, sessionId: string): Promise<{
        id: string;
        roleTitle: string;
        companyName: string | null;
        jobId: string | null;
        publicCode: string | null;
        job: string | number | boolean | Prisma.JsonObject | Prisma.JsonArray | {
            publicCode: string | null;
            description: string | null;
            id: string;
            title: string;
            companyName: string | null;
            city: string | null;
            region: string | null;
            postcode: string | null;
            workMode: import(".prisma/client").$Enums.WorkMode | null;
            employmentType: import(".prisma/client").$Enums.EmploymentType | null;
            experienceLevel: import(".prisma/client").$Enums.ExperienceLevel | null;
            salaryMin: number | null;
            salaryMax: number | null;
            currency: string | null;
            salaryPeriod: import(".prisma/client").$Enums.SalaryPeriod | null;
            category: string | null;
            locationText: string | null;
            sponsorsVisa: boolean;
            perkLabel: string | null;
            isDemo: boolean;
            publishedAt: Date | null;
            applicationUrl: string | null;
            source: string;
            sourceDisplay: string;
            applyMethod: import("../jobs/apply-route").ApplyMethod;
        } | null;
        analysis: {
            summary: {} | null;
            skills: string[];
            responsibilities: string[];
            likelyCategories: string[];
            readinessHints: string[];
            companyPrep: {} | null;
        };
        interviewType: string | null;
        interviewStage: string | null;
        interviewFormat: string | null;
        platform: string | null;
        scheduledAt: Date | null;
        difficulty: string | null;
        confidence: string | null;
        goals: Prisma.JsonValue;
        persona: string;
        mode: string;
        resumeId: string | null;
        readinessScore: number | null;
        overallScore: number | null;
        status: string;
        progress: Prisma.JsonValue;
        checklist: string | number | boolean | Prisma.JsonObject | Prisma.JsonArray | {
            id: string;
            label: string;
            done: boolean;
        }[];
        notes: string | null;
        audioConsentAt: Date | null;
        plan: string | number | boolean | Prisma.JsonObject | Prisma.JsonArray | null;
        topics: {
            id: string;
            topic: string;
            category: string;
            importance: number;
            score: number | null;
        }[];
        questions: {
            id: string;
            prompt: string;
            category: string;
            difficulty: string;
            topic: string | null;
            status: string;
            isFollowUp: boolean;
            parentQuestionId: string | null;
            estimatedSeconds: number | null;
            sortOrder: number;
            attempts: number;
            latestScore: number | null;
        }[];
        progressCounts: {
            answered: number;
            total: number;
        };
        report: {
            overallScore: number;
        } | null;
        createdAt: Date;
        updatedAt: Date;
    }>;
    answerQuestion(userId: string, questionId: string, dto: AnswerInterviewDto): Promise<{
        answerId: string;
        attemptNumber: number;
        body: string;
    }>;
    analyseAnswer(userId: string, answerId: string): Promise<{
        id: string;
        overallScore: number;
        relevanceScore: number | null;
        technicalScore: number | null;
        clarityScore: number | null;
        structureScore: number | null;
        confidenceScore: number | null;
        star: {
            situation: number | null;
            task: number | null;
            action: number | null;
            result: number | null;
        };
        strengths: string[];
        weaknesses: string[];
        suggestions: string[];
        modelAnswer: string | null;
    }>;
    retryAnswer(userId: string, answerId: string, dto: AnswerInterviewDto): Promise<{
        evaluation: {
            id: string;
            overallScore: number;
            relevanceScore: number | null;
            technicalScore: number | null;
            clarityScore: number | null;
            structureScore: number | null;
            confidenceScore: number | null;
            star: {
                situation: number | null;
                task: number | null;
                action: number | null;
                result: number | null;
            };
            strengths: string[];
            weaknesses: string[];
            suggestions: string[];
            modelAnswer: string | null;
        };
        previousAnswerId: string;
        answerId: string;
        attemptNumber: number;
        body: string;
    }>;
    mockStart(userId: string, sessionId: string, dto: MockStartDto): Promise<{
        sessionId: string;
        persona: string;
        questions: {
            id: string;
            prompt: string;
            category: string;
            difficulty: string;
        }[];
    }>;
    mockAnswer(userId: string, sessionId: string, questionId: string, dto: AnswerInterviewDto): Promise<{
        followUp: {
            id: string;
            prompt: string;
        } | null;
        answerId: string;
        attemptNumber: number;
        body: string;
    }>;
    mockComplete(userId: string, sessionId: string): Promise<{
        id: string;
        roleTitle: string;
        companyName: string | null;
        jobId: string | null;
        publicCode: string | null;
        job: string | number | boolean | Prisma.JsonObject | Prisma.JsonArray | {
            publicCode: string | null;
            description: string | null;
            id: string;
            title: string;
            companyName: string | null;
            city: string | null;
            region: string | null;
            postcode: string | null;
            workMode: import(".prisma/client").$Enums.WorkMode | null;
            employmentType: import(".prisma/client").$Enums.EmploymentType | null;
            experienceLevel: import(".prisma/client").$Enums.ExperienceLevel | null;
            salaryMin: number | null;
            salaryMax: number | null;
            currency: string | null;
            salaryPeriod: import(".prisma/client").$Enums.SalaryPeriod | null;
            category: string | null;
            locationText: string | null;
            sponsorsVisa: boolean;
            perkLabel: string | null;
            isDemo: boolean;
            publishedAt: Date | null;
            applicationUrl: string | null;
            source: string;
            sourceDisplay: string;
            applyMethod: import("../jobs/apply-route").ApplyMethod;
        } | null;
        analysis: {
            summary: {} | null;
            skills: string[];
            responsibilities: string[];
            likelyCategories: string[];
            readinessHints: string[];
            companyPrep: {} | null;
        };
        interviewType: string | null;
        interviewStage: string | null;
        interviewFormat: string | null;
        platform: string | null;
        scheduledAt: Date | null;
        difficulty: string | null;
        confidence: string | null;
        goals: Prisma.JsonValue;
        persona: string;
        mode: string;
        resumeId: string | null;
        readinessScore: number | null;
        overallScore: number | null;
        status: string;
        progress: Prisma.JsonValue;
        checklist: string | number | boolean | Prisma.JsonObject | Prisma.JsonArray | {
            id: string;
            label: string;
            done: boolean;
        }[];
        notes: string | null;
        audioConsentAt: Date | null;
        plan: string | number | boolean | Prisma.JsonObject | Prisma.JsonArray | null;
        topics: {
            id: string;
            topic: string;
            category: string;
            importance: number;
            score: number | null;
        }[];
        questions: {
            id: string;
            prompt: string;
            category: string;
            difficulty: string;
            topic: string | null;
            status: string;
            isFollowUp: boolean;
            parentQuestionId: string | null;
            estimatedSeconds: number | null;
            sortOrder: number;
            attempts: number;
            latestScore: number | null;
        }[];
        progressCounts: {
            answered: number;
            total: number;
        };
        report: {
            overallScore: number;
        } | null;
        createdAt: Date;
        updatedAt: Date;
    }>;
    updateNotes(userId: string, sessionId: string, notes: string): Promise<{
        notes: string;
    }>;
    updateChecklist(userId: string, sessionId: string, dto: ChecklistDto): Promise<{
        checklist: {
            id: string;
            label: string;
            done: boolean;
        }[];
    }>;
    consentAudio(userId: string, sessionId: string): Promise<{
        audioConsentAt: Date;
    }>;
    uploadAudio(userId: string, sessionId: string, questionId: string, file: {
        buffer: Buffer;
        originalname: string;
        mimetype: string;
    }): Promise<{
        audioFileId: string;
        objectKey: string;
        transcript: string;
        answerId: string;
        attemptNumber: number;
        body: string;
    }>;
    deleteSession(userId: string, sessionId: string): Promise<{
        deleted: boolean;
    }>;
    adminStats(): Promise<{
        sessions: number;
        completed: number;
        completionRate: number;
        avgOverallScore: number | null;
        avgReadinessScore: number | null;
        aiUsage: {
            feature: string;
            count: number;
            estimatedCost: Prisma.Decimal | null;
        }[];
    }>;
    private transcribe;
    private refreshReadiness;
    private mapEvaluation;
    private markStep;
    private aiJson;
    private buildContext;
    private notify;
    private findByCode;
    private jobCard;
    private owned;
    private ownedFull;
}
