"use client";

import { TableBuilder } from "@/components/TableBuilder";
import { useTableFilters } from "@/components/TableBuilder/hooks";
import { useApp } from "@/context/app";
import { useGlobal } from "@/context/global";
import { useDownloadsSocket } from "@/hooks/socket/download";
import { getDownloadLinkColumns } from "@/models/downloads/tableColumns";
import { fetchDownloadLinks } from "@/services/download/fetchlinks";
import { DownloadsTableSkeletonButton } from "./skeleton/buttons";

type DownloadsLinksProps<TData, TValue> = {};
export function DownloadLinksTable<TData, TValue>({}: DownloadsLinksProps<
  TData,
  TValue
>) {
  const { dict } = useGlobal();

  const { activeSession } = useApp();
  const { permissions } = activeSession;

  const { list, count, filters, setList, setFilters, fetchData } =
    useTableFilters({
      id: "downloads-links",
      searchFields: ["user", "title"],
      fetch: fetchDownloadLinks,
    });

  const columns = getDownloadLinkColumns(dict);

  useDownloadsSocket({ list, setList, fetchData });

  return (
    <TableBuilder
      list={list}
      count={count}
      columns={columns}
      filters={filters}
      setFilters={setFilters}
      fetchData={fetchData}
      skeletonActions={
        <DownloadsTableSkeletonButton list={list} permissions={permissions} />
      }
      hasConfigButton
      hasSearch
    />
  );
}
