import { BaseCommand } from '@adonisjs/core/ace';
import type { ApplicationService } from '@adonisjs/core/types';
type Range<START extends number, END extends number, ARR extends unknown[] = [], ACC extends number = never> = ARR['length'] extends END ? ACC | START | END : Range<START, END, [...ARR, 1], ARR[START] extends undefined ? ACC : ACC | ARR['length']>;
export declare abstract class BaseSchedule {
    abstract type: string;
    alias: string | undefined;
    expression: string;
    config: {
        enabled: boolean;
        immediate: boolean;
        withoutOverlapping: boolean;
        expiresAt: number;
        timezone: string | undefined;
    };
    beforeCallbacks: (() => Promise<void>)[];
    afterCallbacks: (() => Promise<void>)[];
    as(alias: string): this;
    before(callback: () => Promise<void>): this;
    after(callback: () => Promise<void>): this;
    timezone(timezone: string): this;
    skip(state?: boolean): this;
    immediate(state?: boolean): this;
    withoutOverlapping(expiresAt?: number): this;
    everyMinutes(minutes: number): this;
    everyMinute(): this;
    everyTwoMinutes(): this;
    everyThreeMinutes(): this;
    everyFourMinutes(): this;
    everyFiveMinutes(): this;
    everyTenMinutes(): this;
    everyFifteenMinutes(): this;
    everyThirtyMinutes(): this;
    hourly(): this;
    hourlyAt(offset: string | number | Range<0, 59> | Range<0, 59>[]): this;
    everyHours(hours: number, offset?: any[] | string | number): this;
    everyOddHour(offset?: any[] | string | number): this;
    everyTwoHours(offset?: any[] | string | number): this;
    everyThreeHours(offset?: any[] | string | number): this;
    everyFourHours(offset?: any[] | string | number): this;
    everyFiveHours(offset?: any[] | string | number): this;
    everySixHours(offset?: any[] | string | number): this;
    daily(): this;
    weekdays(): this;
    weekends(): this;
    mondays(): this;
    tuesdays(): this;
    wednesdays(): this;
    thursdays(): this;
    fridays(): this;
    saturdays(): this;
    sundays(): this;
    weekly(): this;
    weeklyOn(dayOfWeek?: Range<0, 7>, time?: string): this;
    monthly(): this;
    quarterly(): this;
    yearly(): this;
    yearlyOn(month?: number, dayOfMonth?: string | Range<1, 31>, time?: string): this;
    everySecond(): this;
    everySeconds(second: Range<1, 59>): this;
    everyFiveSeconds(): this;
    everyTenSeconds(): this;
    everyFifteenSeconds(): this;
    everyThirtySeconds(): this;
    cron(expression: string): this;
    protected spliceIntoPosition(position: number, value: string | number): this;
    protected hourBasedSchedule(minutes: string | number | Range<0, 59>[], hours: string | number | Range<0, 59>[]): this;
    days(days: string | number | string[] | number[] | any[]): this;
    at(time: string): this;
    dailyAt(time: string): this;
    twiceDailyAt(first?: Range<0, 23>, second?: Range<0, 23>, offset?: number): this;
    twiceDaily(first?: Range<0, 23>, second?: Range<0, 23>): this;
    twiceMonthly(first?: Range<1, 31>, second?: Range<1, 31>, time?: string): this;
    lastDayOfMonth(time?: string): this;
    monthlyOn(dayOfMonth?: Range<1, 31>, time?: string): this;
    getExpression(): string;
}
export declare class ScheduleCommand extends BaseSchedule {
    type: 'command';
    commandName: string;
    commandArgs: string[];
    constructor(commandName: string, commandArgs?: string[]);
}
export declare class ScheduleCallback extends BaseSchedule {
    type: 'callback';
    callback: Function;
    constructor(callback: Function);
}
export declare class Scheduler {
    protected app: ApplicationService;
    constructor(app: ApplicationService);
    static __decorator_schedules: (ScheduleCallback | ScheduleCommand)[];
    items: (ScheduleCallback | ScheduleCommand)[];
    onStartingCallback?: () => void | Promise<void>;
    onStartedCallback?: () => void | Promise<void>;
    boot(): Promise<void>;
    command(name: string | typeof BaseCommand, args?: string | string[]): ScheduleCommand;
    call(callback: Function): ScheduleCallback;
    withoutOverlapping(callback: () => void, config?: {
        expiresAt: number;
    }): void;
    onStarting(callback: () => void | Promise<void>): void;
    onStarted(callback: () => void | Promise<void>): void;
}
export {};
