import { JSX } from "react";

import { Entity } from "@/common/models/Entity";

/**
 * Колонка матрицы
 */
export interface Column<T extends Entity, K extends keyof T = keyof T> {
	/**
	 * Заголовок (в будущем поменять на ключ к переводу).
	 */
	title: string;

	/**
	 * Имя свойства модели.
	 */
	name: K;

	/**
	 * Функция преобразования.
	 * @param value
	 * @returns
	 */
	convert?: (value: T[K], entity: T) => JSX.Element | string | null;

	// filter?: Filter;
	// sortable?: boolean;
}

export const createColumn = <T extends Entity, K extends keyof T>(
	title: string,
	name: K,
	convert?: (value: T[K], entity: T) => JSX.Element | string | null,
): Column<T> => {
	return {
		title,
		name,
		convert: convert as Column<T>["convert"],
	};
};
