import { ValidatorFn } from '@angular/forms';
/**
 * Lookup column configuration
 */
export interface DynamicFormLookupColumn {
    field: string;
    header: string;
    width?: string;
    type?: 'text' | 'number';
}
/**
 * Responsive size configuration for form fields (grid 12 columns)
 */
export interface DynamicFormFieldSize {
    xs?: number;
    sm?: number;
    md?: number;
    lg?: number;
    xl?: number;
}
/**
 * Dynamic Form Field Configuration
 */
export interface DynamicFormFieldConfig {
    field: string;
    label: string;
    type: 'text' | 'number' | 'currency' | 'dropdown' | 'lookup' | 'textarea' | 'enum' | 'date' | 'datetime' | 'time' | 'checkbox' | 'multiselect' | 'image';
    validators?: ValidatorFn[];
    required?: boolean;
    placeholder?: string;
    defaultValue?: any;
    disabled?: boolean;
    size?: DynamicFormFieldSize | ((formValues: any) => DynamicFormFieldSize);
    visibleWhen?: (formValues: any) => boolean;
    disabledWhen?: (formValues: any) => boolean;
    minLength?: number;
    maxLength?: number;
    mask?: 'cep' | 'postalCode' | 'phone' | 'document' | 'cpf' | 'cnpj' | 'dynamic';
    maskDependsOn?: string;
    maskMapping?: {
        [key: string]: 'NATURAL_PERSON' | 'JURIDICAL_PERSON';
    };
    rows?: number;
    fullSize?: boolean;
    min?: number;
    max?: number;
    minFractionDigits?: number;
    maxFractionDigits?: number;
    useGrouping?: boolean;
    currency?: string;
    locale?: string;
    dateFormat?: string;
    minDate?: Date | 'today';
    options?: any[];
    optionLabel?: string;
    optionValue?: string;
    showClear?: boolean;
    filter?: boolean;
    filterBy?: string;
    maxSelectedLabels?: number;
    selectedItemsLabel?: string;
    enumValues?: string[];
    enumLabels?: {
        [key: string]: string;
    };
    enumOptions?: {
        value: any;
        label: string;
    }[];
    lookupEntity?: string;
    lookupService?: any;
    lookupDisplayField?: string;
    lookupDisplayFields?: string[];
    lookupValueField?: string;
    lookupSearchFields?: string[];
    lookupColumns?: DynamicFormLookupColumn[];
    lookupFilters?: string | ((formValues: any) => string);
    lookupSort?: {
        field: string;
        order: number;
    }[];
    lookupAutocomplete?: boolean;
    lookupAutocompleteMinLength?: number;
    imageAccept?: string;
    imageMaxSize?: number;
    imagePreviewHeight?: string;
}
/**
 * Section style for visual grouping
 */
export type DynamicFormSectionStyle = 'panel' | 'bordered' | 'none';
/**
 * Dynamic Form Section — groups fields with optional visual container
 */
export interface DynamicFormSection {
    fields: DynamicFormFieldConfig[];
    title?: string;
    style?: DynamicFormSectionStyle;
    collapsed?: boolean;
    icon?: string;
}
/**
 * Dialog configuration
 */
export interface DynamicFormDialogConfig {
    header?: string;
    width?: string;
    draggable?: boolean;
    resizable?: boolean;
    maximizable?: boolean;
    closeOnEscape?: boolean;
    dismissableMask?: boolean;
}
/**
 * Drawer size presets
 */
export type DynamicFormDrawerSize = 'small' | 'medium' | 'large' | 'xlarge' | 'full';
/**
 * Drawer configuration
 */
export interface DynamicFormDrawerConfig {
    header?: string;
    position?: 'left' | 'right' | 'top' | 'bottom';
    size?: DynamicFormDrawerSize;
    customWidth?: string;
    showCloseIcon?: boolean;
    closeOnEscape?: boolean;
    dismissable?: boolean;
}
/**
 * @deprecated Use DynamicFormFieldConfig instead
 */
export type FormFieldConfig = DynamicFormFieldConfig;
