import { ApplicationStatus, Prisma } from '@prisma/client';
import { PrismaService } from '../common/prisma/prisma.service';
declare const jobInclude: {
    company: true;
    category: true;
    source: {
        select: {
            name: true;
        };
    };
    skills: {
        include: {
            skill: true;
        };
    };
    screeningQuestions: {
        orderBy: {
            sortOrder: "asc";
        };
    };
};
type JobRow = Prisma.JobGetPayload<{
    include: typeof jobInclude;
}>;
export interface JobQuery {
    q?: string;
    city?: string;
    region?: string;
    postcode?: string;
    workMode?: string;
    employmentType?: string;
    experienceLevel?: string;
    category?: string;
    salaryMin?: number;
    salaryMax?: number;
    visa?: string;
    graduate?: string;
    flexible?: string;
    modes?: string;
    employment?: string;
    levels?: string;
    skill?: string;
    posted?: string;
    cursor?: string;
    limit: number;
}
export declare class JobsService {
    private readonly prisma;
    constructor(prisma: PrismaService);
    search(viewerId: string, query: JobQuery): Promise<{
        total: number;
        newToday: number;
        items: never[];
        nextCursor: string | null;
        topMatch: number | null;
        strongMatches: number;
    } | {
        total: number;
        newToday: number;
        items: {
            skills: string[];
            matchedSkills: string[];
            matchPercent: number;
            bookmarked: boolean;
            applied: boolean;
            id: string;
            publicCode: string | null;
            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("./apply-route").ApplyMethod;
        }[];
        nextCursor: string | null;
        topMatch: number;
        strongMatches: number;
    }>;
    recommended(viewerId: string): Promise<{
        total: number;
        items: {
            bookmarked: boolean;
            matchPercent: number;
            id: string;
            publicCode: string | null;
            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("./apply-route").ApplyMethod;
        }[];
    }>;
    getByPublicCode(code: string): Promise<{
        description: string | null;
        skills: string[];
        id: string;
        publicCode: string | null;
        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("./apply-route").ApplyMethod;
    }>;
    get(viewerId: string, id: string): Promise<{
        bookmarked: boolean;
        application: {
            id: string;
            status: import(".prisma/client").$Enums.ApplicationStatus;
            note: string | null;
            updatedAt: Date;
            events: {
                status: import(".prisma/client").$Enums.ApplicationStatus;
                note: string | null;
                createdAt: Date;
            }[];
        } | null;
        matchPercent: number;
        matchedSkills: string[];
        applicantCount: number;
        network: {
            id: string;
            displayName: string;
            occupation: string | null | undefined;
            isDemo: boolean;
            hasPhoto: boolean;
            connection: string | null;
        }[];
        description: string | null;
        aiSummary: string | null;
        summaryLabel: import(".prisma/client").$Enums.SummaryLabel | null;
        locationText: string | null;
        country: string;
        detail: Prisma.JsonValue;
        applicationUrl: string | null;
        skills: string[];
        posterUserId: string | null;
        sentToPoster: boolean;
        screeningQuestions: {
            id: string;
            prompt: string;
            required: boolean;
            sortOrder: number;
        }[];
        id: string;
        publicCode: string | null;
        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;
        sponsorsVisa: boolean;
        perkLabel: string | null;
        isDemo: boolean;
        publishedAt: Date | null;
        source: string;
        sourceDisplay: string;
        applyMethod: import("./apply-route").ApplyMethod;
    }>;
    bookmark(userId: string, jobId: string): Promise<{
        bookmarked: boolean;
    }>;
    removeBookmark(userId: string, jobId: string): Promise<{
        bookmarked: boolean;
    }>;
    bookmarks(userId: string): Promise<{
        items: {
            bookmarked: boolean;
            id: string;
            publicCode: string | null;
            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("./apply-route").ApplyMethod;
        }[];
    }>;
    apply(userId: string, jobId: string, input: {
        note?: string;
        resumeId?: string;
        coverLetterId?: string;
        answers?: {
            questionId: string;
            answer: string;
        }[];
    }): Promise<{
        id: string;
        status: import(".prisma/client").$Enums.ApplicationStatus;
        applicationUrl: string | null;
        sentToPoster: boolean;
    }>;
    applications(userId: string): Promise<{
        items: {
            id: string;
            status: import(".prisma/client").$Enums.ApplicationStatus;
            note: string | null;
            updatedAt: Date;
            job: {
                id: string;
                publicCode: string | null;
                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("./apply-route").ApplyMethod;
            };
        }[];
    }>;
    updateApplication(userId: string, id: string, status: ApplicationStatus, note?: string): Promise<{
        id: string;
        status: import(".prisma/client").$Enums.ApplicationStatus;
    }>;
    hide(userId: string, jobId: string): Promise<{
        hidden: boolean;
    }>;
    report(userId: string, jobId: string, reason: string, details?: string): Promise<{
        id: string;
        status: import(".prisma/client").$Enums.ReportStatus;
    }>;
    alerts(userId: string): Promise<{
        items: {
            query: string | null;
            id: string;
            createdAt: Date;
            name: string;
            userId: string;
            region: string | null;
            city: string | null;
            postcode: string | null;
            workMode: import(".prisma/client").$Enums.WorkMode | null;
            employmentType: import(".prisma/client").$Enums.EmploymentType | null;
            active: boolean;
        }[];
    }>;
    createAlert(userId: string, input: Prisma.JobAlertCreateWithoutUserInput): Promise<{
        query: string | null;
        id: string;
        createdAt: Date;
        name: string;
        userId: string;
        region: string | null;
        city: string | null;
        postcode: string | null;
        workMode: import(".prisma/client").$Enums.WorkMode | null;
        employmentType: import(".prisma/client").$Enums.EmploymentType | null;
        active: boolean;
    }>;
    deleteAlert(userId: string, id: string): Promise<{
        deleted: boolean;
    }>;
    alertMatches(userId: string, id: string): Promise<{
        total: number;
        newToday: number;
        items: never[];
        nextCursor: string | null;
        topMatch: number | null;
        strongMatches: number;
    } | {
        total: number;
        newToday: number;
        items: {
            skills: string[];
            matchedSkills: string[];
            matchPercent: number;
            bookmarked: boolean;
            applied: boolean;
            id: string;
            publicCode: string | null;
            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("./apply-route").ApplyMethod;
        }[];
        nextCursor: string | null;
        topMatch: number;
        strongMatches: number;
    }>;
    private filters;
    private fullTextIds;
    private addAnd;
    private page;
    private published;
}
export declare function toJobCard(job: JobRow): {
    id: string;
    publicCode: string | null;
    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("./apply-route").ApplyMethod;
};
export {};
