import { RequestHandler } from "express";
import { Controller } from "..";
import { ParsedQs } from "qs";
/**
 * A callback type for handling HTTP requests in a resourceful controller.
 *
 * This type allows for various combinations of parameters:
 * - Two parameters: `(req: Request, res: Response)`.
 * - Three parameters: `(req: Request, res: Response, next: NextFunction)`.
 * - Three parameters with a status code: `(req: Request, res: Response, status: number)`.
 * - Four parameters: `(req: Request, res: Response, next: NextFunction, status: number)`.
 */
export type RouteCallback = RequestHandler<{}, any, any, ParsedQs, Record<string, any>>;
/**
 * @abstract
 * The `ResourcefulController` class is an abstract base class designed to define
 * a set of common methods for resourceful controllers in an Express.js application.
 * It provides a skeleton for CRUD operations, and each method must be implemented by subclasses.
 */
export declare abstract class BaseResourcefulController extends Controller {
    /**
     * Handles the request to list all resources.
     *
     * @param req - The HTTP request object containing request details.
     * @param res - The HTTP response object used to send a response.
     * @param next - The next middleware function in the stack (optional).
     */
    abstract index: RouteCallback;
    /**
     * Handles the request to retrieve a specific resource by ID.
     *
     * @param req - The HTTP request object containing request details, including the resource ID.
     * @param res - The HTTP response object used to send a response.
     * @param next - The next middleware function in the stack (optional).
     */
    abstract show: RouteCallback;
    /**
     * Handles the request to store a newly created resource.
     *
     * @param req - The HTTP request object containing the new resource data.
     * @param res - The HTTP response object used to send a response.
     * @param next - The next middleware function in the stack (optional).
     */
    abstract store: RouteCallback;
    /**
     * Handles the request to update a specific resource.
     *
     * @param req - The HTTP request object containing the updated resource data.
     * @param res - The HTTP response object used to send a response.
     * @param next - The next middleware function in the stack (optional).
     */
    abstract update: RouteCallback;
    /**
     * Handles the request to delete a specific resource.
     *
     * @param req - The HTTP request object containing request details, including the resource ID.
     * @param res - The HTTP response object used to send a response.
     * @param next - The next middleware function in the stack (optional).
     */
    abstract destroy: RouteCallback;
}
