/**
 * Content File Writer
 *
 * Writes pulled content to the file system in the appropriate JSON format.
 */
import type { PulledEntries, PulledPages, PulledNavigation, PulledSettings, PulledForms, PulledTheme, PulledFooter, PulledVenues, PulledEventCategories, PulledEvents, PulledCourses } from '../../client/management/types';
import type { Theme } from '../../contracts';
export interface WriterOptions {
    skipMeta?: boolean;
    cleanupMissing?: boolean;
}
/**
 * Write entries to content directory
 *
 * Format: content/entries/{contentType}/{identifier}.json (one file per entry)
 * Meta: content/.meta/{contentType}.json
 *
 * This is a breaking change from the old format (one file per content type).
 * Old format files are automatically deleted on pull.
 */
export declare function writeEntries(contentDir: string, pulledEntries: PulledEntries, options?: WriterOptions): Promise<{
    dirPath: string;
    metaPath: string;
    count: number;
}>;
/**
 * Write pages to content directory
 *
 * Format: content/pages/{identifier}.json
 * Meta: content/.meta/pages.json
 */
export declare function writePages(contentDir: string, pulledPages: PulledPages, options?: WriterOptions): Promise<{
    filePaths: string[];
    metaPath: string;
}>;
/**
 * Write navigation menus to content directory
 *
 * Format: content/navigation.json
 * Meta: content/.meta/navigation.json
 */
export declare function writeNavigation(contentDir: string, pulledNavigation: PulledNavigation, options?: WriterOptions): Promise<{
    filePath: string;
    metaPath: string;
}>;
/**
 * Write settings to content directory
 *
 * Format: content/settings.json
 */
export declare function writeSettings(contentDir: string, pulledSettings: PulledSettings): Promise<string>;
/**
 * Write forms to content directory
 *
 * Format: content/forms/{slug}.json
 * Meta: content/.meta/forms.json
 */
export declare function writeForms(contentDir: string, pulledForms: PulledForms, options?: WriterOptions): Promise<{
    filePaths: string[];
    metaPath: string;
}>;
/**
 * Write a theme to content directory
 *
 * Format: content/themes/{name}.json
 * Meta: content/.meta/themes.json (updated with this theme's metadata)
 *
 * @param contentDir - Base content directory
 * @param theme - Theme object to write
 * @param themeName - Name for the theme file (without .json)
 * @returns Path to the written file
 */
export declare function writeTheme(contentDir: string, theme: Theme, themeName: string): Promise<string>;
/**
 * Write themes metadata to .meta/themes.json
 *
 * @param contentDir - Base content directory
 * @param meta - Themes metadata
 */
export declare function writeThemesMeta(contentDir: string, meta: {
    pulledAt: string;
    themes: Record<string, {
        themeId: string;
        selectionId: string;
        updatedAt: string;
    }>;
}): Promise<void>;
/**
 * Write a pulled theme to content directory with metadata
 *
 * @param contentDir - Base content directory
 * @param pulledTheme - Pulled theme data from API
 * @param themeName - Name for the theme file (default: 'current')
 * @returns Path to written file and metadata path
 */
export declare function writePulledTheme(contentDir: string, pulledTheme: PulledTheme, themeName?: string, options?: WriterOptions): Promise<{
    filePath: string;
    metaPath: string;
}>;
/**
 * Write venues to content directory
 *
 * Format: content/venues/{slug}.json
 * Meta: content/.meta/venues.json
 */
export declare function writeVenues(contentDir: string, pulledVenues: PulledVenues, options?: WriterOptions): Promise<{
    filePaths: string[];
    metaPath: string;
}>;
/**
 * Write event categories to content directory
 *
 * Format: content/event-categories/{identifier}.json
 * Meta: content/.meta/event-categories.json
 */
export declare function writeEventCategories(contentDir: string, pulledCategories: PulledEventCategories, options?: WriterOptions): Promise<{
    filePaths: string[];
    metaPath: string;
}>;
/**
 * Write events to content directory
 *
 * Format: content/events/{identifier}.json
 * Meta: content/.meta/events.json
 */
export declare function writeEvents(contentDir: string, pulledEvents: PulledEvents, options?: WriterOptions): Promise<{
    filePaths: string[];
    metaPath: string;
}>;
/**
 * Write courses to content directory
 *
 * Format: content/courses/{identifier}.json
 * Meta: content/.meta/courses.json
 */
export declare function writeCourses(contentDir: string, pulledCourses: PulledCourses, options?: WriterOptions): Promise<{
    filePaths: string[];
    metaPath: string;
}>;
/**
 * Write footer content to content directory
 *
 * Format: content/footer.json
 * Meta: content/.meta/footer.json
 */
export declare function writeFooter(contentDir: string, pulledFooter: PulledFooter, options?: WriterOptions): Promise<{
    filePath: string;
    metaPath: string;
}>;
/**
 * Write all pulled content to content directory
 */
export interface WriteAllResult {
    entries: Array<{
        contentType: string;
        dirPath: string;
        metaPath: string;
        count: number;
    }>;
    pages: {
        filePaths: string[];
        metaPath: string;
    };
    navigation: {
        filePath: string;
        metaPath: string;
    };
    settings: string;
    forms: {
        filePaths: string[];
        metaPath: string;
    };
}
/**
 * Update only the metadata files after a successful push.
 * This prevents false stale warnings on consecutive pushes.
 *
 * Unlike writeAllContent, this only updates .meta/ files, not content files.
 */
export declare function updateMetadataAfterPush(contentDir: string, remoteContent: {
    entries: Record<string, Array<{
        identifier: string;
        updatedAt: string;
        createdAt?: string;
    }>>;
    pages: Array<{
        identifier: string;
        updatedAt: string;
        createdAt?: string;
    }>;
    navigation: Array<{
        name: string;
        updatedAt: string;
        createdAt?: string;
    }>;
    forms?: Array<{
        slug: string;
        updatedAt: string;
        createdAt?: string;
    }>;
}): Promise<void>;
export declare function writeAllContent(contentDir: string, content: {
    entries: Record<string, PulledEntries['entries']>;
    pages: PulledPages;
    navigation: PulledNavigation;
    settings: PulledSettings;
    forms?: PulledForms;
}): Promise<WriteAllResult>;
