import { ReactNode } from "react";

import { ReportType } from "@/contracts/client.schemas";

import { BuilderOptions } from "./BuilderOptions";
import { Report } from "./models/Report";
import { ReportWithoutData } from "./models/ReportWithoutData";

/**
 * Интерфейс базового строителя отчетов.
 *
 * Этот интерфейс определяет основные методы, которые должен реализовать любой строитель отчетов.
 */
export interface BaseReportBuilder {
	/**
	 * Возвращает тип отчета.
	 *
	 * @returns {ReportType} Тип отчета.
	 */
	getType(): ReportType;

	/**
	 * Рендерит дополнительные свойства отчета.
	 *
	 * @returns {ReactNode | null} Рендеренный элемент или null.
	 */
	renderExtraProperties(): ReactNode | null;

	/**
	 * Возвращает название отчета.
	 *
	 * @param {Report} report Контейнер отчета.
	 * @returns {string | null} Название отчета или null.
	 */
	getTitle(report: ReportWithoutData): string | null;

	/**
	 * Рендерит детали отчета.
	 *
	 * @param {Report} report Контейнер отчета.
	 * @returns {ReactNode | null} Рендеренный элемент или null.
	 */
	renderDetails(report: Report): ReactNode | null;

	/**
	 * Возвращает опции отчета.
	 *
	 * @returns {BuilderOptions} Опции отчета.
	 */
	getOptions(): BuilderOptions;
}
