import type { LegacyPlatform, PlatformFilter, PlatformRecord } from './platform';
export type IconType = 'svg' | 'png';
export interface Announcement {
    id: string;
    title: string;
    description: string;
    background_color: string;
    icon_type: IconType;
    icon_svg_name?: string;
    icon_png_url?: string;
    /** Extra props for the main bar/icon */
    icon_svg_props?: Record<string, any>;
    platform_id: string;
    platform?: PlatformRecord;
    is_active: boolean;
    cta_enabled?: boolean;
    cta_text?: string;
    cta_icon?: string;
    cta_show_icon?: boolean;
    cta_url?: string;
    cta_target?: '_self' | '_blank';
    cta_button_background_color?: string | null;
    cta_button_text_color?: string | null;
    /** Additional props to spread onto the CTA icon component */
    cta_icon_props?: Record<string, any>;
    created_at: string;
    updated_at: string;
    created_by?: string;
    created_by_user?: {
        id: string;
        email: string;
        full_name?: string;
    };
    announcement_assets?: AnnouncementAsset[];
}
export interface AnnouncementAsset {
    id: string;
    announcement_id: string;
    file_name: string;
    file_url: string;
    file_size: number;
    mime_type: string;
    upload_path: string;
    created_at: string;
}
export interface CreateAnnouncementData {
    title: string;
    description: string;
    background_color: string;
    icon_type: IconType;
    icon_svg_name?: string;
    icon_png_url?: string;
    /** Extra props for the main bar/icon */
    icon_svg_props?: Record<string, any>;
    platforms?: string[];
    is_active?: boolean;
    cta_enabled?: boolean;
    cta_text?: string;
    cta_icon?: string;
    cta_show_icon?: boolean;
    cta_url?: string;
    cta_target?: '_self' | '_blank';
    cta_button_background_color?: string;
    cta_button_text_color?: string;
    cta_icon_props?: Record<string, any>;
    created_by: string;
}
export interface UpdateAnnouncementData {
    title?: string;
    description?: string;
    background_color?: string;
    icon_type?: IconType;
    icon_svg_name?: string;
    icon_png_url?: string;
    /** Extra props for the main bar/icon */
    icon_svg_props?: Record<string, any>;
    platforms?: string[];
    is_active?: boolean;
    cta_enabled?: boolean;
    cta_text?: string;
    cta_icon?: string;
    cta_show_icon?: boolean;
    cta_url?: string;
    cta_target?: '_self' | '_blank';
    cta_button_background_color?: string;
    cta_button_text_color?: string;
    cta_icon_props?: Record<string, any>;
}
export interface AnnouncementListResponse {
    announcements: Announcement[];
    pagination: {
        page: number;
        page_size: number;
        total_count: number;
        total_pages: number;
    };
    filters?: {
        platform?: LegacyPlatform;
        is_active?: boolean;
    };
}
export interface AnnouncementResponse {
    announcement: Announcement;
}
export interface AnnouncementFormData {
    title: string;
    description: string;
    background_color: string;
    icon_type: IconType;
    icon_svg_name: string;
    icon_png_file?: File;
    platforms: string[];
    is_active: boolean;
    cta_enabled: boolean;
    cta_text: string;
    cta_icon: string;
    cta_show_icon: boolean;
    cta_url: string;
    cta_target: '_self' | '_blank';
    cta_button_background_color?: string;
    cta_button_text_color?: string;
    cta_icon_props?: string;
    /** Extra props for the main bar/icon */
    icon_svg_props?: string;
}
export interface GetAnnouncementsOptions {
    platform?: PlatformFilter;
    is_active?: boolean;
    page?: number;
    pageSize?: number;
    sortBy?: 'created_at' | 'updated_at' | 'title';
    sortOrder?: 'asc' | 'desc';
}
export interface IconUploadResponse {
    success: boolean;
    file_url?: string;
    file_name?: string;
    file_size?: number;
    error?: string;
}
export interface IconUploadData {
    file: File;
    announcement_id?: string;
}
export interface AvailableSvgIcon {
    name: string;
    display_name: string;
    component_name: string;
}
export interface AnnouncementError {
    code: string;
    message: string;
    details?: string;
}
export interface AnnouncementValidation {
    title: {
        required: boolean;
        minLength: number;
        maxLength: number;
    };
    description: {
        required: boolean;
        minLength: number;
        maxLength: number;
    };
    background_color: {
        required: boolean;
        pattern: RegExp;
    };
    icon_svg_name: {
        required: boolean;
        validOptions: string[];
    };
    platform: {
        required: boolean;
        validOptions: LegacyPlatform[];
    };
}
export type { PlatformConfig } from './platform';
export interface AnnouncementStats {
    total_announcements: number;
    active_announcements: number;
    announcements_by_platform: Record<LegacyPlatform, number>;
    recent_announcements: Announcement[];
}
export interface AnnouncementBarProps {
    announcement?: Announcement;
    onDismiss?: (announcementId: string) => void;
    className?: string;
}
export interface AnnouncementFormProps {
    announcement?: Announcement;
    onSubmit: (data: AnnouncementFormData) => Promise<void>;
    onCancel: () => void;
    isLoading?: boolean;
    availableIcons: AvailableSvgIcon[];
}
export interface AnnouncementListProps {
    announcements: Announcement[];
    onEdit: (announcement: Announcement) => void;
    onDelete: (announcementId: string) => void;
    onToggleActive: (announcementId: string, isActive: boolean) => void;
    isLoading?: boolean;
}
export interface AnnouncementFilters {
    platform?: LegacyPlatform;
    is_active?: boolean;
    created_by?: string;
    search?: string;
}
export interface AnnouncementSortOptions {
    field: 'created_at' | 'updated_at' | 'title' | 'platform';
    direction: 'asc' | 'desc';
}
export interface SvgIcon {
    name: string;
    label: string;
    component: any;
}
export declare const AVAILABLE_SVG_ICONS: SvgIcon[];
//# sourceMappingURL=announcement.d.ts.map