/**
 * Theme Scheduler
 *
 * Provides time-based, seasonal, and server-specific theme switching.
 * Max tier feature.
 *
 * @since v1.57.5
 */
import type { Tier } from '../../core/types/auth.js';
import type { ExtendedTheme } from './theme-types.js';
/**
 * Day of week type
 */
export type DayOfWeek = 'monday' | 'tuesday' | 'wednesday' | 'thursday' | 'friday' | 'saturday' | 'sunday';
/**
 * Season type
 */
export type Season = 'spring' | 'summer' | 'fall' | 'winter';
/**
 * Time-based schedule entry
 */
export interface TimeScheduleEntry {
    /** Start hour (0-23) */
    startHour: number;
    /** End hour (0-23) */
    endHour: number;
    /** Theme ID to use */
    themeId: string;
    /** Days to apply (empty = all days) */
    days?: DayOfWeek[];
}
/**
 * Seasonal theme mapping
 */
export interface SeasonalThemes {
    spring?: string;
    summer?: string;
    fall?: string;
    winter?: string;
}
/**
 * Server-specific theme mapping
 */
export interface ServerThemes {
    [serverId: string]: string;
}
/**
 * Theme schedule configuration
 */
export interface ThemeScheduleConfig {
    /** Enable time-based switching */
    timeBasedEnabled: boolean;
    /** Time schedule entries */
    timeSchedule: TimeScheduleEntry[];
    /** Enable seasonal themes */
    seasonalEnabled: boolean;
    /** Seasonal theme mappings */
    seasonalThemes: SeasonalThemes;
    /** Enable server-specific themes */
    serverSpecificEnabled: boolean;
    /** Server theme mappings */
    serverThemes: ServerThemes;
    /** Default theme when no schedule matches */
    defaultTheme: string;
}
/**
 * Get current season based on date
 */
export declare function getCurrentSeason(date?: Date): Season;
/**
 * Get current day of week
 */
export declare function getCurrentDayOfWeek(date?: Date): DayOfWeek;
/**
 * Check if current time falls within a time range
 */
export declare function isWithinTimeRange(startHour: number, endHour: number, currentHour?: number): boolean;
/**
 * Theme Scheduler Service
 */
export declare class ThemeScheduler {
    private config;
    private currentServerId;
    constructor(config?: Partial<ThemeScheduleConfig>);
    /**
     * Check if user has scheduler access
     */
    hasAccess(tier: Tier): boolean;
    /**
     * Set current server context
     */
    setCurrentServer(serverId: string | null): void;
    /**
     * Get the theme to use based on current context
     */
    getActiveTheme(userTier: Tier, date?: Date): ExtendedTheme | null;
    /**
     * Update schedule configuration
     */
    updateConfig(config: Partial<ThemeScheduleConfig>): void;
    /**
     * Get current configuration
     */
    getConfig(): ThemeScheduleConfig;
    /**
     * Add time schedule entry
     */
    addTimeSchedule(entry: TimeScheduleEntry): void;
    /**
     * Remove time schedule entry by index
     */
    removeTimeSchedule(index: number): boolean;
    /**
     * Set seasonal theme
     */
    setSeasonalTheme(season: Season, themeId: string): void;
    /**
     * Remove seasonal theme
     */
    removeSeasonalTheme(season: Season): void;
    /**
     * Set server-specific theme
     */
    setServerTheme(serverId: string, themeId: string): void;
    /**
     * Remove server-specific theme
     */
    removeServerTheme(serverId: string): void;
    /**
     * Get theme for specific time (for preview)
     */
    getThemeForTime(hour: number, day?: DayOfWeek): string | null;
    /**
     * Get theme for specific season
     */
    getThemeForSeason(season: Season): string | null;
    /**
     * Get theme for specific server
     */
    getThemeForServer(serverId: string): string | null;
    /**
     * Generate 24-hour schedule preview
     */
    get24HourPreview(): Array<{
        hour: number;
        themeId: string | null;
    }>;
    /**
     * Get season-themed preview
     */
    getSeasonPreview(): Array<{
        season: Season;
        themeId: string | null;
    }>;
    /**
     * Validate schedule configuration
     */
    validateConfig(): {
        valid: boolean;
        errors: string[];
    };
}
/**
 * Get theme scheduler instance
 */
export declare function getThemeScheduler(): ThemeScheduler;
/**
 * Initialize theme scheduler with config
 */
export declare function initThemeScheduler(config?: Partial<ThemeScheduleConfig>): ThemeScheduler;
/**
 * Create default auto dark mode schedule
 */
export declare function createAutoDarkModeSchedule(lightTheme: string, darkTheme: string): TimeScheduleEntry[];
/**
 * Create work hours schedule
 */
export declare function createWorkHoursSchedule(workTheme: string, relaxTheme: string, workDays?: DayOfWeek[]): TimeScheduleEntry[];
/**
 * Create default seasonal themes
 */
export declare function createDefaultSeasonalThemes(): SeasonalThemes;
/**
 * Format hour for display
 */
export declare function formatHour(hour: number): string;
/**
 * Format time range for display
 */
export declare function formatTimeRange(startHour: number, endHour: number): string;
/**
 * Get season display name
 */
export declare function getSeasonDisplayName(season: Season): string;
//# sourceMappingURL=theme-scheduler.d.ts.map