/**
 * Per-Plugin Schedule Configuration
 *
 * Manages plugin-specific schedule overrides and blackout dates.
 *
 * @since v1.51.4
 */
import type { TimeWindow } from './schedule-executor.js';
/**
 * Per-plugin schedule configuration
 */
export interface PluginScheduleConfig {
    /** Override global time window for this plugin */
    window?: TimeWindow;
    /** Disable scheduled updates for this plugin */
    disabled?: boolean;
    /** Delay updates for this many days after release */
    delayDays?: number;
    /** Auto-approve major version updates for this plugin */
    autoApproveMajor?: boolean;
}
/**
 * Schedule overrides configuration
 */
export interface ScheduleOverrides {
    /** Blackout dates (ISO format YYYY-MM-DD) when no updates should run */
    blackoutDates: string[];
    /** Per-plugin schedule configurations */
    plugins: Record<string, PluginScheduleConfig>;
    /** Auto-approve major version updates globally */
    autoApproveMajor: boolean;
}
/**
 * Default schedule overrides
 */
export declare const DEFAULT_SCHEDULE_OVERRIDES: ScheduleOverrides;
/**
 * Plugin Schedule Manager
 *
 * Manages per-plugin schedule configurations and blackout dates.
 */
export declare class PluginScheduleManager {
    private filePath;
    private overrides;
    constructor(filePath: string);
    /**
     * Load overrides from file
     */
    load(): Promise<void>;
    /**
     * Save overrides to file
     */
    save(): Promise<void>;
    /**
     * Get all overrides
     */
    getOverrides(): ScheduleOverrides;
    /**
     * Check if today is a blackout date
     */
    isBlackoutDate(date?: Date): boolean;
    /**
     * Add a blackout date
     */
    addBlackoutDate(date: string): Promise<void>;
    /**
     * Remove a blackout date
     */
    removeBlackoutDate(date: string): Promise<void>;
    /**
     * Get blackout dates
     */
    getBlackoutDates(): string[];
    /**
     * Clear expired blackout dates (dates in the past)
     */
    clearExpiredBlackoutDates(): Promise<string[]>;
    /**
     * Get plugin schedule config
     */
    getPluginConfig(pluginId: string): PluginScheduleConfig;
    /**
     * Set plugin schedule config
     */
    setPluginConfig(pluginId: string, config: PluginScheduleConfig): Promise<void>;
    /**
     * Update plugin schedule config (merge with existing)
     */
    updatePluginConfig(pluginId: string, config: Partial<PluginScheduleConfig>): Promise<void>;
    /**
     * Remove plugin schedule config
     */
    removePluginConfig(pluginId: string): Promise<void>;
    /**
     * Check if plugin is disabled for scheduling
     */
    isPluginDisabled(pluginId: string): boolean;
    /**
     * Get plugin's custom time window (or undefined for global window)
     */
    getPluginWindow(pluginId: string): TimeWindow | undefined;
    /**
     * Get plugin's delay days (or 0 for immediate)
     */
    getPluginDelayDays(pluginId: string): number;
    /**
     * Check if update should be delayed based on release date
     *
     * @param pluginId - Plugin identifier
     * @param releaseDate - Release date of the update
     * @returns true if update should wait, false if ready
     */
    shouldDelayUpdate(pluginId: string, releaseDate: Date): boolean;
    /**
     * Get when a delayed update will be ready
     */
    getDelayedUpdateReadyDate(pluginId: string, releaseDate: Date): Date;
    /**
     * Check if major version update should be auto-approved
     */
    shouldAutoApproveMajor(pluginId: string): boolean;
    /**
     * Set global auto-approve major setting
     */
    setAutoApproveMajor(value: boolean): Promise<void>;
    /**
     * Get global auto-approve major setting
     */
    getAutoApproveMajor(): boolean;
    /**
     * Get list of plugins with custom configurations
     */
    getConfiguredPlugins(): string[];
    /**
     * Format date as YYYY-MM-DD
     */
    private formatDate;
    /**
     * Validate date format (YYYY-MM-DD)
     */
    private isValidDateFormat;
}
/**
 * Get the singleton plugin schedule manager
 */
export declare function getPluginScheduleManager(): PluginScheduleManager | null;
/**
 * Initialize the plugin schedule manager
 */
export declare function initPluginScheduleManager(filePath: string): PluginScheduleManager;
/**
 * Reset the singleton (for testing)
 */
export declare function resetPluginScheduleManager(): void;
//# sourceMappingURL=plugin-schedule.d.ts.map