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 const useListSearch = (fields: string[][], rows: any[]) => {
    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);
                }
            })
        })
    }, [fields, rows, text])

    return {
        rows: updatedRows,
        renderSearch,
    }
}