import { ProductSchema } from "../client";
import { isNil } from "lodash";
import { ProductFieldNames } from "../pages/LeadsPage/tabs/ProductAndServiceTab/components/ProductView/ProductView.tsx";
import UseObjectState from "./UseObjectState.ts";
import { CRUDTableProps } from "./CRUDTable.tsx";
import { MRT_RowData } from "mantine-react-table";

export type ObjectWithNameAndId = {
    id: number;
    name: string;
};

export type BaseFormInputProps<T> = {
    onChange: (value: T) => void;
    value: T;
    error?: string | null;
};
export const formatDate = (date: string) => {
    return new Date(date).toLocaleDateString("ru-RU");
};

export const getProductFields = (product: ProductSchema) => {
    return (
        Object.entries(product)
            .map(([key, value]) => {
                const fieldName = ProductFieldNames[key as keyof ProductSchema];
                if (!fieldName || isNil(value) || value === "" || !value)
                    return;
                return [fieldName.toString(), value.toString()];
            })
            .filter(obj => obj !== undefined) || []
    );
};

export function ObjectStateToTableProps<T extends MRT_RowData>(
    state: UseObjectState<T>
): CRUDTableProps<T> {
    return {
        items: state.objects,
        onDelete: state.onDelete,
        onChange: state.onChange,
        onCreate: state.onCreate,
    };
}
