/**
 * Variante semántica del empty/error state.
 *
 * - `empty`    — la fuente devolvió cero resultados (lista vacía, sin notifs).
 *                Icono neutro, sin alarma.
 * - `error`    — la fuente falló por un error de la app/servidor (500, parse).
 *                Icono de alerta.
 * - `offline`  — la fuente falló por red caída / Firestore unreachable.
 *                Icono cloud-offline.
 *
 * Cada variante mapea a un icono default si `icon` no se especifica.
 */
export type EmptyStateVariant = 'empty' | 'error' | 'offline';
/**
 * Acción CTA opcional del state (típicamente "Reintentar" / "Recargar").
 *
 * Si se omite, el componente no renderiza botón. El `handler` ya viene
 * traducido — el componente NO resuelve i18n internamente.
 */
export interface EmptyStateAction {
    label: string;
    handler: () => void | Promise<void>;
    /** Si `true`, el botón pasa a estado WORKING (spinner). Útil mientras re-fetcha. */
    loading?: boolean;
}
/**
 * Metadata para `<val-empty-state>` — molecule que renderiza un estado
 * declarativo de "no hay datos / hubo error / sin red" con título, descripción
 * opcional y CTA opcional. Reemplaza el patrón ad-hoc (ion-icon + val-title +
 * val-text + val-button) que cada página venía improvisando.
 *
 * I18n: los strings (`title`, `description`, `action.label`) los resuelve la
 * página antes de construir las props. Esto mantiene el componente agnóstico
 * a namespaces y consistente con el resto de la lib (FormMetadata, etc.).
 */
export interface EmptyStateMetadata {
    /** Título principal. Requerido. */
    title: string;
    /** Descripción opcional (1-2 líneas) debajo del título. */
    description?: string;
    /** Variante semántica. Default `'empty'`. */
    variant?: EmptyStateVariant;
    /**
     * Nombre del icono Ionicons (kebab-case). Si se omite, el componente usa
     * el default de la variante:
     *  - empty   → `document-outline`
     *  - error   → `alert-circle-outline`
     *  - offline → `cloud-offline-outline`
     *
     * Si pasás un icono custom, importalo + registralo con `addIcons({ ... })`
     * en el componente consumidor (Ionic standalone no auto-registra).
     */
    icon?: string;
    /** Tamaño del icono en píxeles. Default `64`. */
    iconSize?: number;
    /** Acción CTA opcional. Si se omite, no se muestra botón. */
    action?: EmptyStateAction;
}
