"use client";

import { ColumnDef } from "@tanstack/react-table";
import { FileInfoItem } from "../actions";
import { Button } from "@/components/ui/button";
import { Download, Trash2 } from "lucide-react";
import { formatDolceDateTime } from "../utils/date-formatter";

interface FileListColumnsProps {
  onDownload: (file: FileInfoItem) => void;
  onDelete?: (file: FileInfoItem) => void;
  lng?: string;
}

export const createFileListColumns = ({
  onDownload,
  onDelete,
  lng = "ko",
}: FileListColumnsProps): ColumnDef<FileInfoItem>[] => [
  {
    accessorKey: "FileSeq",
    header: lng === "ko" ? "순번" : "No.",
    minSize: 80,
    cell: ({ row }) => {
      if (row.original.FileServerId === "LOCAL") {
        return <div className="text-center">-</div>;
      }
      return <div className="text-center">{row.getValue("FileSeq")}</div>;
    },
  },
  {
    accessorKey: "FileName",
    header: lng === "ko" ? "파일명" : "File Name",
    minSize: 300,
    cell: ({ row }) => {
      return <div className="font-medium">{row.getValue("FileName")}</div>;
    },
  },
  {
    accessorKey: "FileSize",
    header: lng === "ko" ? "파일크기" : "File Size",
    minSize: 100,
    cell: ({ row }) => {
      const size = parseInt(row.getValue("FileSize") as string);
      if (isNaN(size) || size === 0) return "-";
      
      if (size < 1024) return `${size} B`;
      if (size < 1024 * 1024) return `${(size / 1024).toFixed(2)} KB`;
      return `${(size / (1024 * 1024)).toFixed(2)} MB`;
    },
  },
  {
    accessorKey: "CreateDt",
    header: lng === "ko" ? "생성일시" : "Created Date",
    minSize: 200,
    cell: ({ row }) => {
      const date = row.getValue("CreateDt") as string;
      return <div className="text-sm text-muted-foreground">{formatDolceDateTime(date)}</div>;
    },
  },
  {
    id: "actions",
    header: "Action",
    minSize: 160,
    cell: ({ row }) => {
      const isLocal = row.original.FileServerId === "LOCAL";
      return (
        <div className="flex gap-2 items-center justify-center">
            <Button
            variant="outline"
            size="sm"
            onClick={(e) => {
                e.stopPropagation();
                onDownload(row.original);
            }}
            >
            <Download className="h-4 w-4 mr-2" />
            {lng === "ko" ? "다운로드" : "Download"}
            </Button>
            {isLocal && onDelete && (
                <Button
                    variant="destructive"
                    size="sm"
                    onClick={(e) => {
                        e.stopPropagation();
                        onDelete(row.original);
                    }}
                >
                    <Trash2 className="h-4 w-4" />
                </Button>
            )}
        </div>
      );
    },
  },
];

