import {useState, useMemo} from "react";
import Input from "@/components/Low/Input";

/*fields example = [
    ['id'],
    ['companyInformation', 'companyInformation', 'name']
]*/

const getFieldValue = (fields: string[], data: any): string => {
	if (fields.length === 0) return data;
	const [key, ...otherFields] = fields;

	if (data[key]) return getFieldValue(otherFields, data[key]);
	return data;
};

export function useListSearch<T>(fields: string[][], rows: T[]) {
	const [text, setText] = useState("");

	const renderSearch = () => <Input label="Search" type="text" name="search" onChange={setText} placeholder="Enter search text" value={text} />;

	const updatedRows = useMemo(() => {
		const searchText = text.toLowerCase();
		return rows.filter((row) => {
			return fields.some((fieldsKeys) => {
				const value = getFieldValue(fieldsKeys, row);
				if (typeof value === "string") {
					return value.toLowerCase().includes(searchText);
				}

				if (typeof value === "number") {
					return (value as Number).toString().includes(searchText);
				}
			});
		});
	}, [fields, rows, text]);

	return {
		rows: updatedRows,
		renderSearch,
	};
}
