import {
	ColumnDef,
	flexRender,
	getCoreRowModel,
	getPaginationRowModel,
	getSortedRowModel,
	useReactTable,
} from "@tanstack/react-table";
//import { Button } from "@/components/ui/button";
import { useState } from "react";
import { LstCard } from "@/components/extendedUI/LstCard";
import { ScrollArea } from "@/components/ui/scroll-area";
import {
	Table,
	TableBody,
	TableCell,
	TableHead,
	TableHeader,
	TableRow,
} from "@/components/ui/table";

interface DataTableProps<TData, TValue> {
	columns: ColumnDef<TData, TValue>[];
	data: TData[];
	info: any;
}

type ColumnSort = {
	id: string;
	desc: boolean;
};
type SortingState = ColumnSort[];

export function InvTable<TData, TValue>({
	columns,
	data,
	info,
}: DataTableProps<TData, TValue>) {
	const [sorting, setSorting] = useState<SortingState>([]);
	const [pagination, setPagination] = useState({
		pageIndex: 0, //initial page index
		pageSize: 500, //default page size
	});
	const table = useReactTable({
		data,
		columns,
		getCoreRowModel: getCoreRowModel(),
		getPaginationRowModel: getPaginationRowModel(),
		onPaginationChange: setPagination,
		getSortedRowModel: getSortedRowModel(),
		state: {
			//...
			pagination,
			sorting,
		},
		manualSorting: true,
		onSortingChange: setSorting,
		initialState: {
			sorting: [
				{
					id: "DaysSinceLast",
					desc: true,
				},
			],
		},
	});
	//console.log(table.getState().sorting);
	//console.log(parseInt(style.height.replace("px", "")) - 50);
	// console.log(info);
	return (
		<LstCard
			className="p-3"
			// style={{
			//     width: `${parseInt(style.width.replace("px", "")) - 50}px`,
			//     height: `${parseInt(style.height.replace("px", "")) - 150}px`,
			//     cursor: "move",
			// }}
			//style={{ overflow: "auto" }}
		>
			<div>
				<div className="flex flex-row justify-between">
					<p className="text-center text-pretty">
						{info.rowType} {data.length > 0 ? "lanes" : "lane"} older than:{" "}
						{info.age}, {data.length} needing to be completed
					</p>
				</div>
				<ScrollArea className="h-72 rounded-md border m-2">
					<Table
					// style={{
					//     width: `${parseInt(style.width.replace("px", "")) - 50}px`,
					//     height: `${parseInt(style.height.replace("px", "")) - 200}px`,
					//     cursor: "move",
					// }}
					>
						<TableHeader>
							{table.getHeaderGroups().map((headerGroup) => (
								<TableRow key={headerGroup.id}>
									{headerGroup.headers.map((header) => {
										return (
											<TableHead key={header.id}>
												{header.isPlaceholder
													? null
													: flexRender(
															header.column.columnDef.header,
															header.getContext(),
														)}
											</TableHead>
										);
									})}
								</TableRow>
							))}
						</TableHeader>
						<TableBody>
							{table.getRowModel().rows?.length ? (
								table.getRowModel().rows.map((row) => (
									<TableRow
										key={row.id}
										data-state={row.getIsSelected() && "selected"}
									>
										{row.getVisibleCells().map((cell) => (
											<TableCell key={cell.id}>
												{flexRender(
													cell.column.columnDef.cell,
													cell.getContext(),
												)}
											</TableCell>
										))}
									</TableRow>
								))
							) : (
								<TableRow>
									<TableCell
										colSpan={columns.length}
										className="h-24 text-center"
									>
										No results.
									</TableCell>
								</TableRow>
							)}
						</TableBody>
					</Table>
				</ScrollArea>
			</div>
			{/* <div className="flex items-center justify-end space-x-2">
                <Button
                    variant="outline"
                    size="sm"
                    onClick={() => table.previousPage()}
                    disabled={!table.getCanPreviousPage()}
                >
                    Previous
                </Button>
                <Button
                    variant="outline"
                    size="sm"
                    onClick={() => table.nextPage()}
                    disabled={!table.getCanNextPage()}
                >
                    Next
                </Button>
            </div> */}
		</LstCard>
	);
}
