import { api } from "./common";
import {
  createSavedFilterPayload,
  deleteSavedFilterPayload,
  updateSavedFilterPayload,
} from "../../types/filter";
import { viewSettingsDropDownAPIProps } from "../../types/common";

export const entityTableMetaMaster = async (entity_type: string) => {
  try {
    const response = await api.post(
      `/meta/get-table-data?entity_type=${entity_type}&list_type=${entity_type}`
    );

    const rawColumns = response.data?.data?.column_list || [];

    const res = rawColumns.map((item: any) => ({
      id: item.attribute_key,
      accessorKey: item.attribute_key,
      header: item.name,
    }));
    return { res };
  } catch (error) {
    console.error("Failed to fetch table meta:", error);
    return { res: [] };
  }
};

export const entityTableFilterMaster = async (entity_type: string) => {
  try {
    const response = await api.post(
      `/meta/get-table-data?entity_type=${entity_type}&list_type=${entity_type}`
    );

    // const filteredData = {
    //   ...response.data.data,
    //   column_list: response.data.data.column_list.filter(
    //     (item: any) => item.attribute_key !== "action"
    //   ),
    // };
    // return response.data.data;
    // return filteredData; // FOR ACTION COLUMN REMOVE
    return response.data.data;
  } catch (error) {
    console.error("Failed to fetch filter operation list meta:", error);
  }
};

export const fetchDetailsByFilterId = async (filterId: string) => {
  const response = await api.get(`/filter/${filterId}`);
  return response.data;
};

export const commonGetDropdownDataAPI = async (
  entity_type: string,
  // organization_id?: string | null,
  data?: any
) => {
  try {
    const requestBody = {
      status: "ACTIVE",
      organization_id: 1,
      ...data,
    };

    const response = await api.post(
      `/list-master/getDropdownData/${entity_type}`,
      requestBody
    );

    return response.data;
  } catch (error) {
    console.error("Failed to fetch dropdown data:", error);
    throw error;
  }
};

export const createSavedFilter = async (
  entity_type: string,
  payload: createSavedFilterPayload
) => {
  try {
    const response = await api.post(
      `/entity/create?entity_type=${entity_type}`,
      payload
    );
    return response.data;
  } catch (error) {
    console.error("Failed to fetch saved filter list:", error);
    throw error;
  }
};

export const deleteSavedFilter = async (
  entity_type: string,
  payload: deleteSavedFilterPayload
) => {
  try {
    const response = await api.post(
      `/entity/update/${payload?.id}?entity_type=${entity_type}`,
      payload
    );
    return response.data;
  } catch (error) {
    console.error("Failed to delete saved filter:", error);
    throw error;
  }
};

export const updateSavedFilter = async (
  entity_type: string,
  payload: updateSavedFilterPayload
) => {
  try {
    const response = await api.post(
      `/entity/update/${payload?.id}?entity_type=${entity_type}`,
      payload
    );
    return response.data;
  } catch (error) {
    console.error("Failed to update saved filter:", error);
    throw error;
  }
};

// ALL View Settings API

export const saveSettingsData = async (payload: any) => {
  try {
    const response = await api.post(`/entity/create?entity_type=LAP`, payload);
    return response.data;
  } catch (error) {
    console.error("Failed to save settings data:", error);
    throw error;
  }
};

export const getSettingsData = async (entity_type: any) => {
  try {
    const response = await api.get(
      `layout-preference?entity_type=${entity_type}`
    );
    return response.data;
  } catch (error) {
    console.error("Failed to fetch settings data:", error);
    throw error;
  }
};

export const viewSettingsDropDown = async ({
  entity_type,
  column,
  sort_by,
}: viewSettingsDropDownAPIProps): Promise<Array<string>> => {
  const response = await api.get(
    `/layout-preference/column?entity_type=${entity_type}&column=${column}&sort_by=${sort_by}`
  );

  return response.data;
};
