import { DataSource, Repository } from 'typeorm';
import { UserRole } from '../../common/enums/user-role.enum';
import { JobTitle } from '../job-titles/entities/job-title.entity';
import { Site } from '../sites/entities/site.entity';
import { UserSite } from '../sites/entities/user-site.entity';
import { CreateWorkerDto } from './dto/create-worker.dto';
import { UpdateWorkerDto } from './dto/update-worker.dto';
import { WorkersQueryDto } from './dto/workers-query.dto';
import { Worker } from './entities/worker.entity';
import { WorkerSite } from './entities/worker-site.entity';
export interface ResolvedWorkerRates {
    dailyBase: string;
    technicalAllowance: string;
    invoiceDailyRate: string;
    jobTitleId: number;
}
export declare class WorkersService {
    private readonly workersRepository;
    private readonly workerSitesRepository;
    private readonly sitesRepository;
    private readonly jobTitlesRepository;
    private readonly userSitesRepository;
    private readonly dataSource;
    constructor(workersRepository: Repository<Worker>, workerSitesRepository: Repository<WorkerSite>, sitesRepository: Repository<Site>, jobTitlesRepository: Repository<JobTitle>, userSitesRepository: Repository<UserSite>, dataSource: DataSource);
    findAllForCompany(companyId: number, query: WorkersQueryDto, user?: {
        id: number;
        role: UserRole;
    }): Promise<Worker[]>;
    findOne(companyId: number, id: number): Promise<Worker>;
    findById(id: number): Promise<Worker>;
    create(companyId: number, dto: CreateWorkerDto, createdBy: number): Promise<Worker>;
    update(companyId: number, id: number, dto: UpdateWorkerDto, updatedBy: number): Promise<Worker>;
    deactivate(companyId: number, id: number): Promise<void>;
    bulkUpdateJobTitle(companyId: number, workerIds: number[], jobTitleId: number): Promise<{
        before: Worker[];
        after: Worker[];
    }>;
    bulkAssignSites(companyId: number, workerIds: number[], siteIds: number[], assignedBy: number): Promise<{
        previousSiteIds: Record<number, number[]>;
    }>;
    bulkDeactivate(companyId: number, workerIds: number[]): Promise<void>;
    getSiteIds(workerId: number): Promise<number[]>;
    assignSites(workerId: number, siteIds: number[], assignedBy: number): Promise<number[]>;
    resolveRates(workerId: number): Promise<ResolvedWorkerRates>;
    private assertWorkersBelongToCompany;
    private assertJobTitleBelongsToCompany;
    private assertSitesBelongToCompany;
}
