/**
 * Job Management Module for BaoLife
 * Handles jobs, occupations, career progression, and performance tracking.
 * Ported from Python jobs/job_manager.py
 */
import { Player } from '../../models/Player.js';
import { Person } from '../../models/Person.js';
import { MessageEventData } from '../../events/base.js';
export interface JobLevel {
    id: string;
    level: string;
    salary: number;
    energy_modifier: number;
}
export interface Occupation {
    id: string;
    type: 'job';
    title: string;
    description: string;
    shifts: string;
    hourType: 'full-time' | 'part-time';
    requirements: 'none' | 'high_school' | 'bachelors_degree' | 'doctorate_degree';
    levels: JobLevel[];
    image: string | null;
    people: string[];
}
export interface JobRecord {
    id: string;
    type: 'job';
    date: string;
    level: JobLevel;
    performance: number;
    focus: string;
}
export interface JobApplyResult {
    success: boolean;
    message: string;
    job?: Occupation;
}
export interface JobQuitResult {
    success: boolean;
    message: string;
}
export declare function createJobLevel(level: string, salary: number, energy_modifier: number): JobLevel;
export declare function createOccupation(title: string, description: string, shifts: string, requirements: Occupation['requirements'], levels: JobLevel[], image?: string | null): Occupation;
export declare function getOccupations(): Occupation[];
export declare function setJob(person: Person, occupation: Occupation, date: string): void;
export declare function randomJob(player: Player, person: Person): Person;
export interface JobUpdateResult {
    promoted: boolean;
    fired: boolean;
    newLevel?: JobLevel;
    message?: string;
    event?: MessageEventData;
}
/**
 * Updates job performance and handles promotions/terminations.
 *
 * This function:
 * - Updates performance based on focus level (Work Hard, Balanced, Slack Off)
 * - Handles promotions when performance > 90
 * - Handles terminations when performance < 10
 * - Adds appropriate messages to player's message queue
 *
 * Performance modifiers:
 * - Work Hard: +2
 * - Balanced: 0
 * - Slack Off: -1
 *
 * @param player - The player object (for message queue and date info)
 * @param person - The person whose job performance to update
 * @returns JobUpdateResult with promotion/termination info, or null if no job
 */
export declare function handleJob(player: Player, person: Person): JobUpdateResult | null;
/**
 * Allows the player to apply for a specific job.
 *
 * This function:
 * - Finds the job by ID in available occupations
 * - Checks if player meets education requirements
 * - Sets the job for the player's character
 * - Creates coworkers for the new job
 * - Adds a confirmation message
 *
 * @param player - The player object
 * @param jobId - The unique ID of the job to apply for
 * @returns JobApplyResult with success status and message
 */
export declare function applyForJob(player: Player, jobId: string): JobApplyResult;
/**
 * Allows the player to quit their current job.
 *
 * This function:
 * - Finds the job by ID in player's activities or occupation catalog
 * - Removes it from activities list
 * - Removes the activity record
 * - Sets occupation to 'unemployed'
 * - Adds a confirmation message
 *
 * @param player - The player object
 * @param jobId - The unique ID of the job to quit
 * @returns JobQuitResult with success status and message
 */
export declare function quitJob(player: Player, jobId: string): JobQuitResult;
export declare function getOccupationById(id: string): Occupation | undefined;
export declare function getOccupationByTitle(title: string): Occupation | undefined;
export declare function getOccupationsByRequirement(requirement: Occupation['requirements']): Occupation[];
export declare function getRandomOccupation(): Occupation;
/**
 * Focus level type for job performance
 */
export type JobFocus = 'Work Hard' | 'Balanced' | 'Slack Off';
/**
 * Set the focus level for a person's job.
 *
 * Focus levels affect weekly performance updates:
 * - Work Hard: +2 modifier (faster promotions, more energy cost)
 * - Balanced: 0 modifier (steady progress)
 * - Slack Off: -1 modifier (slower progress, risk of termination)
 *
 * @param person - The person whose job focus to set
 * @param focus - The focus level to set
 * @returns true if focus was set, false if no job found
 */
export declare function setJobFocus(person: Person, focus: JobFocus): boolean;
/**
 * Get the job record for a person.
 *
 * @param person - The person to get job record for
 * @returns The job record or null if not found
 */
export declare function getJobRecord(person: Person): JobRecord | null;
/**
 * Get the current job occupation for a person.
 *
 * @param person - The person to get job for
 * @returns The occupation or null if not employed
 */
export declare function getCurrentJob(person: Person): Occupation | null;
export declare function clearJobCaches(): void;
export declare const jobManager: {
    createJobLevel: typeof createJobLevel;
    createOccupation: typeof createOccupation;
    getOccupations: typeof getOccupations;
    getOccupationById: typeof getOccupationById;
    getOccupationByTitle: typeof getOccupationByTitle;
    getOccupationsByRequirement: typeof getOccupationsByRequirement;
    getRandomOccupation: typeof getRandomOccupation;
    setJob: typeof setJob;
    randomJob: typeof randomJob;
    handleJob: typeof handleJob;
    setJobFocus: typeof setJobFocus;
    getJobRecord: typeof getJobRecord;
    getCurrentJob: typeof getCurrentJob;
    applyForJob: typeof applyForJob;
    quitJob: typeof quitJob;
    clearJobCaches: typeof clearJobCaches;
};
//# sourceMappingURL=job_manager.d.ts.map