import { BaseSchedule } from '../AdaptableState/Common/Schedule';
import { ReportSchedule } from '../AdaptableState/ExportState';
import { IPushPullSchedule } from '../AdaptableState/IPushPullState';
import { OpenFinSchedule } from '../AdaptableState/OpenFinState';
import { ReminderSchedule, ScheduleState } from '../AdaptableState/ScheduleState';
/**
 * Provides run-time access to the Schedule Module and associated state
 */
export interface ScheduleApi {
    /**
     * Retrieves Schedule section from Adaptable State
     */
    getScheduleState(): ScheduleState;
    /**
     * Retrieves the Schedule section from Adaptable State
     * @returns schedules
     */
    getSchedules(): BaseSchedule[];
    /**
     * Retrieves Schedule by id
     * @param id Schedule id
     * @returns schedule
     */
    getScheduleById(id: BaseSchedule['Uuid']): BaseSchedule;
    /**
     * Retrieves all Reminder-based Schedules from Schedule State
     * @returns reminder schedules
     */
    getReminderSchedules(config?: {
        includeLayoutNotAssociatedObjects?: boolean;
    }): ReminderSchedule[];
    /**
     * Retrieves all active (not-suspended) Reminder-based Schedules from Schedule State
     * @returns reminder schedules
     */
    getActiveReminderSchedules(): ReminderSchedule[];
    /**
     * Retrieves all suspended Reminder-based Schedules from Schedule State
     * @returns reminder schedules
     */
    getSuspendedReminderSchedules(): ReminderSchedule[];
    /**
     * Adds Reminder-based Schedule
     * @param ReminderSchedule Reminder Schedule to add
     * @returns reminder schedule
     */
    addReminderSchedule(reminderSchedule: ReminderSchedule): ReminderSchedule;
    /**
     * Edits Reminder-based Schedule
     * @param ReminderSchedule Reminder Schedule to add
     * @returns reminder schedule
     */
    editReminderSchedule(reminderSchedule: ReminderSchedule): ReminderSchedule;
    /**
     * Deletes Reminder-based Schedule
     * @param ReminderSchedule Reminder Schedule to delete
     */
    deleteReminderSchedule(reminderSchedule: ReminderSchedule): void;
    /**
     * Suspends Reminder-based Schedule
     * @param ReminderSchedule Reminder Schedule to suspend
     * @returns reminder schedule
     */
    suspendReminderSchedule(reminderSchedule: ReminderSchedule): ReminderSchedule;
    /**
     * Activates a suspended Reminder-based Schedule
     * @param ReminderSchedule Reminder Schedule to Un-suspend (activate)
     * @returns reminder schedule
     */
    unSuspendReminderSchedule(reminderSchedule: ReminderSchedule): void;
    /**
     * Retrieves all Report / Export Schedules from Schedule State
     * @returns report schedules
     */
    getReportSchedules(config?: {
        includeLayoutNotAssociatedObjects?: boolean;
    }): ReportSchedule[];
    /**
     * Retrieves all active (not-suspended) Report / Export Schedules from Schedule State
     * @returns report schedules
     */
    getActiveReportSchedules(): ReportSchedule[];
    /**
     * Retrieves all suspended Report / Export Schedules from Schedule State
     * @returns report schedules
     */
    getSuspendedReportSchedules(): ReportSchedule[];
    /**
     * Adds Report / Export Schedule
     * @param ReportSchedule Report / export Schedule to add
     * @returns report schedule
     */
    addReportSchedule(reportSchedule: ReportSchedule): ReportSchedule;
    /**
     * Edits Report / Export Schedule
     * @param ReportSchedule Report / export Schedule to edit
     * @returns report schedule
     */
    editReportSchedule(reportSchedule: ReportSchedule): ReportSchedule;
    /**
     * Deletes Report / Export Schedule
     * @param ReportSchedule Report / export Schedule to delete
     */
    deleteReportSchedule(reportSchedule: ReportSchedule): void;
    /**
     * Suspends Report / Export Schedule
     * @param ReportSchedule Report / export Schedule to suspend
     * @returns report schedule
     */
    suspendReportSchedule(reportSchedule: ReportSchedule): ReportSchedule;
    /**
     * Activates a suspended Report / Export Schedule
     * @param ReportSchedule Report / export Schedule to Un-suspend (activate)
     * @returns report schedule
     */
    unSuspendReportSchedule(reportSchedule: ReportSchedule): ReportSchedule;
    /**
     * Retrieves all ipushpull-based Schedules from Schedule State
     * @returns IPushPull schedules
     */
    getIPushPullSchedules(config?: {
        includeLayoutNotAssociatedObjects?: boolean;
    }): IPushPullSchedule[];
    /**
     * Retrieves all active (not-suspended) ipushpull-based Schedules from Schedule State
     * @returns IPushPull schedules
     */
    getActiveIPushPullSchedules(): IPushPullSchedule[];
    /**
     * Retrieves all suspended ipushpull-based Schedules from Schedule State
     * @returns IPushPull schedules
     */
    getSuspendedIPushPullSchedules(): IPushPullSchedule[];
    /**
     * Add ipushpull-based Schedule
     * @param IPushPullSchedule ipushpull-based Schedule to add
     * @returns IPushPull schedules
     */
    addIPushPullSchedule(iPushPullSchedule: IPushPullSchedule): IPushPullSchedule;
    /**
     * Edit ipushpull-based Schedule
     * @param IPushPullSchedule ipushpull-based Schedule to edit
     * @returns IPushPull schedules
     */
    editIPushPullSchedule(iPushPullSchedule: IPushPullSchedule): IPushPullSchedule;
    /**
     * Delete ipushpull-based Schedule
     * @param IPushPullSchedule ipushpull-based Schedule to delete
     */
    deleteIPushPullSchedule(iPushPullSchedule: IPushPullSchedule): void;
    /**
     * Suspends ipushpull-based Schedule
     * @param IPushPullSchedule ipushpull-based Schedule to suspend
     * @returns IPushPull schedule
     */
    suspendIPushPullSchedule(iPushPullSchedule: IPushPullSchedule): IPushPullSchedule;
    /**
     * Activates a suspended ipushpull-based Schedule
     * @param IPushPullSchedule ipushpull-based Schedule to Un-suspend (activate)
     * @returns IPushPull schedule
     */
    unSuspendIPushPullSchedule(iPushPullSchedule: IPushPullSchedule): IPushPullSchedule;
    /**
     * Retrieves all OpenFin-based Schedules from Schedule State
     * @returns OpenFin schedules
     */
    getOpenFinSchedules(config?: {
        includeLayoutNotAssociatedObjects?: boolean;
    }): OpenFinSchedule[];
    /**
     * Retrieves all active (not-suspended) OpenFin-based Schedules from Schedule State
     * @returns OpenFin schedules
     */
    getActiveOpenFinSchedules(): OpenFinSchedule[];
    /**
     * Retrieves all suspended OpenFin-based Schedules from Schedule State
     * @returns OpenFin schedules
     */
    getSuspendedOpenFinSchedules(): OpenFinSchedule[];
    /**
     * Add OpenFin-based Schedule
     * @param OpenFinSchedule OpenFin-based Schedule to add
     * @returns OpenFin schedule
     */
    addOpenFinSchedule(openFinSchedule: OpenFinSchedule): OpenFinSchedule;
    /**
     * Edit OpenFin-based Schedule
     * @param OpenFinSchedule OpenFin-based Schedule to edit
     * @returns OpenFin schedule
     */
    editOpenFinSchedule(openFinSchedule: OpenFinSchedule): OpenFinSchedule;
    /**
     * Delete OpenFin-based Schedule
     * @param OpenFinSchedule OpenFin-based Schedule to delete
     * @returns OpenFin schedule
     */
    deleteOpenFinSchedule(openFinSchedule: OpenFinSchedule): void;
    /**
     * Suspends OpenFin-based Schedule
     * @param OpenFinSchedule OpenFin-based Schedule to suspend
     * @returns OpenFin schedule
     */
    suspendOpenFinSchedule(openFinSchedule: OpenFinSchedule): OpenFinSchedule;
    /**
     * Activates a suspended OpenFin-based Schedule
     * @param OpenFinSchedule OpenFin-based Schedule to Un-suspend (activate)
     * @returns OpenFin schedule
     */
    unSuspendOpenFinSchedule(openFinSchedule: OpenFinSchedule): OpenFinSchedule;
    /**
     * Applies the Schedule of given type
     * @param schedule Schedule to apply
     * @param scheduleType type of Schedule
     */
    applySchedule(schedule: BaseSchedule, scheduleType: 'Report' | 'ipushpull' | 'Reminder' | 'OpenFin'): void;
    /**
     * Opens Settings Panel with Schedule section selected and visible
     */
    openScheduleSettingsPanel(): void;
}
