import { Repository } from 'typeorm';
import { PeriodStatus } from '../../common/enums/period-status.enum';
import { UserRole } from '../../common/enums/user-role.enum';
import { Company } from '../companies/entities/company.entity';
import { Site } from '../sites/entities/site.entity';
import { UserSite } from '../sites/entities/user-site.entity';
import { CreatePeriodDto } from './dto/create-period.dto';
import { PeriodsQueryDto } from './dto/periods-query.dto';
import { UpdatePeriodDatesDto } from './dto/update-period-dates.dto';
import { Period } from './entities/period.entity';
import { WorkerPeriodSnapshotsService } from './snapshots/worker-period-snapshots.service';
export interface DeletedPeriodSnapshot {
    id: number;
    siteId: number;
    startDate: string;
    endDate: string;
    labelMonth: number;
    labelYear: number;
    status: PeriodStatus;
    rejectionNote: string | null;
    submittedBy: number | null;
    submittedAt: Date | null;
    validatedBy: number | null;
    validatedAt: Date | null;
    createdBy: number | null;
    createdAt: Date;
    attendancesDeleted: number;
    advancesDeleted: number;
}
export declare class PeriodsService {
    private readonly periodsRepository;
    private readonly sitesRepository;
    private readonly companiesRepository;
    private readonly userSitesRepository;
    private readonly snapshotsService;
    constructor(periodsRepository: Repository<Period>, sitesRepository: Repository<Site>, companiesRepository: Repository<Company>, userSitesRepository: Repository<UserSite>, snapshotsService: WorkerPeriodSnapshotsService);
    findAllForSite(siteId: number, query: PeriodsQueryDto): Promise<Period[]>;
    findAllForCompany(companyId: number, query: PeriodsQueryDto, user?: {
        id: number;
        role: UserRole;
    }): Promise<Period[]>;
    findById(id: number): Promise<Period>;
    create(siteId: number, dto: CreatePeriodDto, createdBy: number): Promise<Period>;
    findOrCreateForDate(siteId: number, isoDate: string, createdBy: number): Promise<Period>;
    updateDates(id: number, dto: UpdatePeriodDatesDto): Promise<Period>;
    submit(id: number, submittedBy: number): Promise<Period>;
    validate(id: number, validatedBy: number): Promise<Period>;
    reject(id: number, note: string, rejectedBy: number): Promise<Period>;
    unlock(id: number, reason: string, _unlockedBy: number): Promise<Period>;
    ensureOpen(period: Period): void;
    remove(id: number): Promise<DeletedPeriodSnapshot>;
    findForLabelMonth(companyId: number, labelMonth: number, labelYear: number): Promise<Period[]>;
    private assertNoOverlap;
}
