import type { OpenAPIV3 } from 'openapi-types';
import type { Action } from '../Actions';
import FieldCollection from '../Collections/FieldCollection';
import { type AbstractMixable, type Model, type OpenApiSchema, type UnknownRecord } from '../Contracts';
import type { Field } from '../Fields';
import { Filter } from '../Filters';
import type AvonRequest from '../Http/Requests/AvonRequest';
import { Ordering } from '../Orderings';
import type { Repository } from '../Repositories';
declare const _default: <TModel, T extends AbstractMixable = AbstractMixable>(Parent: T) => (abstract new (...args: import("../Contracts").Args) => {
    resource: Model;
    /**
     * Indicates resource is available to display in Swagger UI.
     */
    availableForSwagger: boolean;
    /**
     * Indicates resource is available for `index` API.
     */
    availableForIndex: boolean;
    /**
     * Indicates resource is available for `detail` API.
     */
    availableForDetail: boolean;
    /**
     * Indicates resource is available for `create` API.
     */
    availableForCreation: boolean;
    /**
     * Indicates resource is available for `update` API.
     */
    availableForUpdate: boolean;
    /**
     * Indicates resource is available for `delete` API.
     */
    availableForDelete: boolean;
    /**
     * Indicates resource is available for `force delete` API.
     */
    availableForForceDelete: boolean;
    /**
     * Indicates resource is available for `restore` API.
     */
    availableForRestore: boolean;
    /**
     * Indicates resource is available for `review` API.
     */
    availableForReview: boolean;
    /**
     * Get the Open API json schema.
     */
    schema(request: AvonRequest): OpenAPIV3.PathsObject;
    resourceIndexSchema(request: AvonRequest): OpenAPIV3.PathItemObject | undefined;
    resourceContentSchema(fields: Record<string, OpenApiSchema>): {
        type: string;
        items: {
            type: string;
            properties: {
                metadata: OpenApiSchema;
                authorization: {
                    type: string;
                    properties: {
                        authorizedToForceDelete?: {
                            type: string;
                            default: boolean;
                            description: string;
                        } | undefined;
                        authorizedToRestore?: {
                            type: string;
                            default: boolean;
                            description: string;
                        } | undefined;
                        authorizedToReview?: {
                            type: string;
                            default: boolean;
                            description: string;
                        } | undefined;
                        authorizedToView: {
                            type: string;
                            default: boolean;
                            description: string;
                        };
                        authorizedToUpdate: {
                            type: string;
                            default: boolean;
                            description: string;
                        };
                        authorizedToDelete: {
                            type: string;
                            default: boolean;
                            description: string;
                        };
                    };
                };
                fields: {
                    type: string;
                    properties: Record<string, OpenApiSchema>;
                };
            };
        };
    };
    /**
     * Get the resource metadata schema.
     */
    resourceMetaDataSchema(): OpenApiSchema;
    /**
     * Get the searching parameters for index schema.
     */
    searchParameters(request: AvonRequest): OpenAPIV3.ParameterObject[];
    /**
     * Get pagination parameters for index schema.
     */
    paginationParameters(request: AvonRequest): OpenAPIV3.ParameterObject[];
    /**
     * Get soft delete resource parameters for schema.
     */
    softDeleteParameters(request: AvonRequest): OpenAPIV3.ParameterObject[];
    /**
     * Get ordering parameters.
     */
    orderingParameters(request: AvonRequest): OpenAPIV3.ParameterObject[];
    /**
     * Get filtering parameters.
     */
    filteringParameters(request: AvonRequest): OpenAPIV3.ParameterObject[];
    /**
     * Get resource store schema.
     */
    resourceStoreSchema(request: AvonRequest): OpenAPIV3.PathItemObject | undefined;
    /**
     *
     */
    resourceDetailSchema(request: AvonRequest): OpenAPIV3.PathItemObject | undefined;
    /**
     *
     */
    resourceLookupSchema(request: AvonRequest): OpenAPIV3.PathItemObject | undefined;
    /**
     *
     */
    resourceReviewSchema(request: AvonRequest): OpenAPIV3.PathItemObject | undefined;
    /**
     *
     */
    resourceUpdateSchema(request: AvonRequest): OpenAPIV3.PathItemObject | undefined;
    /**
     *
     */
    resourceDeleteSchema(request: AvonRequest): OpenAPIV3.PathItemObject | undefined;
    /**
     *
     */
    resourceForceDeleteSchema(request: AvonRequest): OpenAPIV3.PathItemObject | undefined;
    /**
     *
     */
    resourceRestoreSchema(request: AvonRequest): OpenAPIV3.PathItemObject | undefined;
    /**
     * Get the Open API json schema for relationship fields.
     */
    actionsSchema(request: AvonRequest): OpenAPIV3.PathsObject;
    /**
     * Get the Open API json schema for relationship fields.
     */
    associationSchema(request: AvonRequest): OpenAPIV3.PathsObject;
    /**
     * Get the single resource content schema.
     */
    singleResourceContent(request: AvonRequest, schema?: Record<string, OpenApiSchema>): Record<string, OpenAPIV3.MediaTypeObject>;
    paginatedResponseSchema(data: UnknownRecord): Record<string, OpenAPIV3.MediaTypeObject>;
    jsonResponseSchema(data: UnknownRecord, meta?: UnknownRecord): Record<string, OpenAPIV3.MediaTypeObject>;
    /**
     * Get the single resource content schema.
     */
    reviewResourceContent(request: AvonRequest): Record<string, OpenAPIV3.MediaTypeObject>;
    /**
     * Get the single resource path parameters.
     */
    singleResourcePathParameters(request: AvonRequest): OpenAPIV3.ParameterObject[];
    /**
     * Get the single resource path parameters.
     */
    actionQueryParameters(request: AvonRequest, action: Action): OpenAPIV3.ParameterObject[];
    /**
     * Get the API paths.
     */
    apis(request: AvonRequest): Record<string, string>;
    /**
     * Get route key name.
     */
    getRouteKeyName(): string;
    /**
     * Get the schema label.
     */
    label(): string;
    /**
     * Format the given schema for responses.
     */
    formatResponseFields(request: AvonRequest, fields: FieldCollection): Record<string, OpenApiSchema>;
    /**
     * Format the given schema for responses.
     */
    formatPayloadFields(request: AvonRequest, fields: FieldCollection): Record<string, OpenApiSchema>;
    /**
     * name
     */
    authorizationResponses(): OpenAPIV3.ResponsesObject;
    /**
     * name
     */
    errorsResponses(): OpenAPIV3.ResponsesObject;
    /**
     * name
     */
    validationResponses(): OpenAPIV3.ResponsesObject;
    /**
     * Get the swagger-ui possible request body contents.
     */
    accepts(): string[];
    uriKey(): string;
    availableFields(request: AvonRequest): FieldCollection;
    perPageOptions(): number[];
    availableFieldsOnForms(request: AvonRequest): FieldCollection;
    resolveFilters(request: AvonRequest): Filter[];
    resolveOrderings(request: AvonRequest): Ordering[];
    availableFieldsOnIndexOrDetail(request: AvonRequest): FieldCollection;
    fieldsForIndex(request: AvonRequest): Field[];
    fieldsForDetail(request: AvonRequest): Field[];
    fieldsForReview(request: AvonRequest): Field[];
    fieldsForCreate(request: AvonRequest): Field[];
    fieldsForUpdate(request: AvonRequest): Field[];
    resolveActions(request: AvonRequest): Action[];
    softDeletes(): boolean;
    repository(): Repository<Model>;
}) & T;
export default _default;
