import Duration from "../../duration/Duration";
import Period from "../Period";
import PeriodTimeChanger from "../PeriodTimeChanger";
import { IPeriodOverlappingConf } from "./confs/IPeriodOverlappingConf.interface";
import IPeriodComparison from "./IPeriodComparison";
export interface PeriodDTO {
    start: Date;
    end: Date;
    duration: Duration;
    change: PeriodTimeChanger;
}
export default abstract class IPeriod {
    protected _start: Date;
    protected _end: Date;
    protected readonly _timeChanger: PeriodTimeChanger;
    constructor(start: Date, end: Date);
    getDates(): Date[];
    getOverlappingDates(dates: Date[]): Date[];
    isDateOverlapping(date: Date): boolean;
    isPeriodOverlapping(period: Period, conf?: IPeriodOverlappingConf): boolean;
    getOverlappingPeriods(periods: Period[], conf?: IPeriodOverlappingConf): Period[];
    comparePeriod(period: Period): IPeriodComparison[];
    cutBoundaries(periods: Period[]): Period[];
}
