import { toUpdateTableHeaderColumns } from "@/services/public";

export async function toUpdateTableColumn({
  intialTableColumn,
  updatedTableColumn,
  requestType,
  setVisibleColumns
}: any): Promise<boolean> {
  
    const updatedColumnMap = new Map<string, number>();
    updatedTableColumn.forEach((item: { props: any; }, index: number) => {
        const fieldKey = item.props?.field;
        updatedColumnMap.set(fieldKey, index);
    });

    let unmatchedStartIndex = updatedTableColumn.length;
    const finalTableColumn = intialTableColumn.map((column: { field: string; }) => {
        if (updatedColumnMap.has(column.field)) {
        return { ...column, order_number: updatedColumnMap.get(column.field)! };
        }
        return { ...column, order_number: unmatchedStartIndex++ };
    });

    const sortedTableColumn = finalTableColumn.sort((a: { order_number: number; }, b: { order_number: number; }) => a.order_number - b.order_number);

    const trimDataKey = updatedTableColumn.map((item: any) => item.props?.field);

    const filteredData = sortedTableColumn.filter((item: { field: any }) =>
        trimDataKey.includes(item.field)
    );

    setVisibleColumns(filteredData); 
    try {
        const payloadData = {
        listing_name: requestType,
        column_preferences: sortedTableColumn,
        };
        const response = await toUpdateTableHeaderColumns(payloadData);
        return response?.status === "success";
    } catch (error) {
        console.error("Error updating table columns:", error);
        return false;
    }
}