import { Collection } from 'collect.js';
import type { AnyRecord, AnyValue, Model, OpenApiSchema, Optional } from '../Contracts';
import { type Field, Lazy } from '../Fields';
import Relation from '../Fields/Relation';
import type AvonRequest from '../Http/Requests/AvonRequest';
export default class FieldCollection<TItem extends Field = Field> extends Collection<TItem> {
    /**
     * Find a given field by its attribute.
     */
    findFieldByAttribute(attribute: string, defaultValue?: AnyValue): Optional<TItem>;
    /**
     * Resolve value of fields.
     */
    resolve(resource: Model): FieldCollection<TItem>;
    /**
     * Resolve value of fields for display.
     */
    resolveForDisplay(resource: Model): FieldCollection<TItem>;
    /**
     * Remove non-creation fields from the collection.
     */
    onlyCreationFields(request: AvonRequest): FieldCollection<TItem>;
    /**
     * Remove non-update fields from the collection.
     */
    onlyUpdateFields(request: AvonRequest, resource: Model): FieldCollection<TItem>;
    /**
     * Filter fields for showing on index.
     */
    filterForIndex(request: AvonRequest, resource: Model): FieldCollection<TItem>;
    /**
     * Filter fields for showing on detail.
     */
    filterForDetail(request: AvonRequest, resource: Model): FieldCollection<TItem>;
    /**
     * Filter fields for showing on review.
     */
    filterForReview(request: AvonRequest, resource: Model): FieldCollection<TItem>;
    /**
     * Filter fields for showing on review.
     */
    filterForAssociation(request: AvonRequest): FieldCollection<TItem>;
    /**
     * Reject if the field supports Filterable Field.
     */
    withOnlyFilterableFields(): FieldCollection<Field>;
    /**
     * Reject if the field supports Orderable Field.
     */
    withOnlyOrderableFields(): FieldCollection<Field>;
    /**
     * Reject if the field not supports Relatable Field.
     */
    withOnlyRelatableFields(): FieldCollection<Relation>;
    /**
     * Reject if the field not supports Relatable Field and not eager loaded.
     */
    onlyLoadedRelatableFields(): FieldCollection<Relation>;
    /**
     * Reject if the field is relatable Field.
     */
    withoutRelatableFields(): FieldCollection<TItem>;
    /**
     * Reject if the field not supports Lazy Field.
     */
    withOnlyLazyFields(): FieldCollection<Lazy>;
    /**
     * Reject if the field not supports Lazy Field and not eager loaded.
     */
    onlyLoadedLazyFields(): FieldCollection<Lazy>;
    /**
     * Reject if the field is Lazy Field.
     */
    withoutLazyFields(): FieldCollection<TItem>;
    /**
     * Reject if the field is relatable Field.
     */
    withoutUnfillableFields(): FieldCollection<TItem>;
    /**
     * Reject if the field is relatable Field.
     */
    withoutUnresolvableFields(): FieldCollection<TItem>;
    /**
     * Filter elements should be displayed for the given request.
     */
    authorized(request: AvonRequest): FieldCollection<TItem>;
    /**
     * Transform fields to open api valid schema.
     */
    payloadSchemas(request: AvonRequest): Record<string, OpenApiSchema>;
    /**
     * Transform fields to open api valid schema.
     */
    responseSchemas(request: AvonRequest): Record<string, OpenApiSchema>;
    /**
     * Transform fields to object by values.
     */
    fieldValues(request: AvonRequest): AnyRecord;
}
