import type { SettingsSourceMetadata, ValidationIssue } from './useGeneralSettings.js';
/**
 * Settings → SEO ("Meta Defaults / Verification / Sitemap") form state.
 *
 * Single source of truth: every field reads from and writes back to the SAME
 * shared SEO config service used by Settings → General and the /seo workspace.
 *   - meta defaults + verification  → `/seo/config` (`site` overrides)
 *   - sitemap auto-generate / ping  → `/seo/crawl-settings` (`module`)
 *   - sitemap status (read-only)    → `/seo/sitemap/status`
 *
 * It deliberately does NOT own site URL or the document robots defaults — those
 * are owned by Settings → General (also via `/seo/config`) and must not be
 * duplicated here.
 */
export interface SeoSettingsForm {
    /** Site-wide title template (`%page% — %site%`), applied when a page has none. */
    titleTemplate: string;
    /** Fallback meta description when a page/post defines none. */
    defaultMetaDescription: string;
    /**
     * Fallback social (Open Graph / Twitter) image URL. Kept as a denormalized
     * cache of the selected asset's public URL so the synchronous public renderer
     * doesn't need a DB lookup. Empty = use the dynamic /og.png fallback.
     */
    defaultOgImage: string;
    /** Canonical reference to the selected media asset (source of truth). */
    defaultSocialImageAssetId: string;
    googleVerification: string;
    bingVerification: string;
    yandexVerification: string;
    pinterestVerification: string;
    facebookDomainVerification: string;
    /** Rebuild the sitemap whenever content is published (`module`). */
    autoGenerateSitemap: boolean;
    /** Notify Google/Bing when the sitemap changes (`module`). */
    pingOnPublish: boolean;
}
export interface SitemapSummary {
    sitemapUrl: string;
    lastGeneratedAt: string | null;
    pagesIncluded: number;
    pagesExcluded: number;
    warnings: string[];
}
/** Recommended max length for the default meta description (SERP truncation). */
export declare const META_DESCRIPTION_MAX = 160;
/** Below this, the description is likely too thin to be useful. */
export declare const META_DESCRIPTION_MIN = 70;
export declare function validateTitleTemplateClient(template: string): {
    valid: boolean;
    unknownTokens: string[];
};
type SaveState = 'idle' | 'saving' | 'success' | 'error';
export interface UseSeoSettings {
    loading: boolean;
    loadError: string | null;
    form: SeoSettingsForm;
    setField: <K extends keyof SeoSettingsForm>(key: K, value: SeoSettingsForm[K]) => void;
    dirty: boolean;
    issues: ValidationIssue[];
    hasErrors: boolean;
    sources: Record<string, SettingsSourceMetadata>;
    /** Effective site name (read-only here; edited in General/advanced) for preview. */
    siteName: string;
    /** Effective site URL for preview + warnings. */
    siteUrl: string;
    isProduction: boolean;
    sitemap: SitemapSummary | null;
    saveState: SaveState;
    saveError: string | null;
    save: () => Promise<void>;
    reset: () => void;
    refetch: () => void;
    regenerateSitemap: () => Promise<void>;
    regenerating: boolean;
}
export declare function useSeoSettings(canEdit: boolean): UseSeoSettings;
export {};
//# sourceMappingURL=useSeoSettings.d.ts.map