import { BaseResource } from './base';
import { Tsonik } from '../client';
import { ApiResponse, BulkJobResult, Job, JobCreate, JobsBulkEditQuery, JobsBulkEditRequest, JobsBulkEditResponse, JobsPriorityUpdate, JobsQuery, JobsStateUpdate, JobStepsUpdate, JobUpdate, PaginatedResponse, JobStep } from '../types';
/**
 * Job resource for interacting with Iconik Jobs API
 * Handles job management, state control, and monitoring
 */
export declare class JobResource extends BaseResource {
    constructor(client: Tsonik);
    /**
     * Get a specific job by ID
     * @param jobId The job ID
     * @returns Promise resolving to the job data
     */
    getJob(jobId: string): Promise<ApiResponse<Job>>;
    /**
     * Search and list jobs with optional filtering
     * @param query Query parameters for filtering and pagination
     * @returns Promise resolving to paginated job results
     */
    listJobs(query?: JobsQuery): Promise<ApiResponse<PaginatedResponse<Job>>>;
    /**
     * Create a new job
     * @param jobData Job creation data
     * @returns Promise resolving to the created job
     */
    createJob(jobData: JobCreate): Promise<ApiResponse<Job>>;
    /**
     * Update an existing job
     * @param jobId The job ID to update
     * @param jobData Partial job data to update
     * @returns Promise resolving to the updated job
     */
    updateJob(jobId: string, jobData: JobUpdate): Promise<ApiResponse<Job>>;
    /**
     * Replace an existing job (full update)
     * @param jobId The job ID to replace
     * @param jobData Complete job data to replace with
     * @param options Optional request options
     * @returns Promise resolving to the replaced job
     */
    replaceJob(jobId: string, jobData: JobUpdate, options?: {
        merge_metadata?: string;
    }): Promise<ApiResponse<Job>>;
    /**
     * Delete a job
     * @param jobId The job ID to delete
     * @returns Promise resolving to deletion confirmation
     */
    deleteJob(jobId: string): Promise<ApiResponse<void>>;
    /**
     * Update job priority
     * @param jobId The job ID
     * @param priority New priority value (1-10)
     * @returns Promise resolving to updated job data
     */
    updatePriority(jobId: string, priority: number): Promise<ApiResponse<Job>>;
    /**
     * Update job steps
     * @param jobId The job ID
     * @param stepsData The steps update data
     * @returns Promise resolving to the updated job
     */
    updateSteps(jobId: string, stepsData: JobStepsUpdate): Promise<ApiResponse<Job>>;
    /**
     * Bulk edit jobs based on query filters
     * @param query Query parameters to filter which jobs to edit
     * @param editData Data to update on matching jobs
     * @returns Promise resolving to bulk edit result
     */
    bulkEditJobs(query: JobsBulkEditQuery, editData: JobsBulkEditRequest): Promise<ApiResponse<JobsBulkEditResponse>>;
    /**
     * Bulk update job priorities
     * @param priorityData Bulk priority update data
     * @returns Promise resolving to bulk operation results
     */
    bulkUpdatePriority(priorityData: JobsPriorityUpdate): Promise<ApiResponse<BulkJobResult[]>>;
    /**
     * Bulk update job states
     * @param stateData Bulk state update data
     * @returns Promise resolving to bulk operation results
     */
    bulkUpdateState(stateData: JobsStateUpdate): Promise<ApiResponse<BulkJobResult[]>>;
    /**
     * Bulk delete multiple jobs
     * @param jobIds Array of job IDs to delete
     * @returns Promise resolving to deletion confirmation (204 No Content)
     */
    bulkDelete(jobIds: string[]): Promise<ApiResponse<void>>;
    /**
     * Reindex a job
     * @param jobId The job ID to reindex
     * @param options Options for reindexing
     * @returns Promise resolving to success confirmation
     */
    reindexJob(jobId: string, options?: {
        sync_to_another_dc?: boolean;
    }): Promise<ApiResponse<void>>;
    /**
     * Update multiple steps for a job
     * @param jobId The job ID to update steps for
     * @param stepsData Job steps update data
     * @returns Promise resolving to the updated job
     */
    updateJobSteps(jobId: string, stepsData: JobStepsUpdate): Promise<ApiResponse<Job>>;
    /**
     * Replace multiple steps for a job
     * @param jobId The job ID to replace steps for
     * @param stepsData Job steps update data
     * @returns Promise resolving to the updated job
     */
    replaceJobSteps(jobId: string, stepsData: JobStepsUpdate): Promise<ApiResponse<Job>>;
    /**
     * Update a single job step
     * @param jobId The job ID the step belongs to
     * @param stepId The ID of the step to update
     * @param stepData Step update data (status, message, etc.)
     * @returns Promise resolving to the updated job
     */
    updateJobStep(jobId: string, stepId: string, stepData: Partial<JobStep>): Promise<ApiResponse<Job>>;
    /**
     * Replace a single job step (complete replacement)
     * @param jobId The job ID the step belongs to
     * @param stepId The ID of the step to replace
     * @param stepData Full step data to replace with
     * @returns Promise resolving to the updated job
     */
    replaceJobStep(jobId: string, stepId: string, stepData: JobStep): Promise<ApiResponse<Job>>;
}
//# sourceMappingURL=jobs.d.ts.map