// src/components/storage/ItemMenus.jsx
import React from "react";
import { LuCornerUpLeft, LuDownload, LuInfo, LuPencil, LuShare2, LuTrash2 } from "react-icons/lu";
import { IoArchiveOutline, IoFolderOpen } from "react-icons/io5";
import { FaRegStar, FaStar } from "react-icons/fa";
import MenuBtn from "./MenuBtn";
import { getFileId, getFolderId, isZipFile } from "../../utils/storage";

export function FileMenu({
  file,
  onDetails,
  onRename,
  onZip,
  onUnzip,
  onShare,
  onDownload,
  onMove,
  onToggleStar,
  onTrashOrRestore,
  onHardDelete,
  onOpenColorModal,
}) {
  return (
    <div className="flex flex-col gap-1">
      <MenuBtn onAction={() => onDetails?.("file", file)}>
        <LuInfo className="text-[#43BEFF]" />
        جزئیات
      </MenuBtn>

      <MenuBtn onAction={() => onRename?.(file)}>
        <LuPencil className="text-[#43BEFF]" />
        تغییر نام
      </MenuBtn>

      <MenuBtn onAction={() => onOpenColorModal?.(file)}>
        <LuPencil className="text-[#43BEFF]" />
        تغییر رنگ
      </MenuBtn>

      <MenuBtn
        onAction={() =>
          onZip?.({
            type: "file",
            id: getFileId(file),
            name: file?.name || "file",
          })
        }
      >
        <IoArchiveOutline className="text-[#43BEFF]" />
        فشرده‌سازی (Zip)
      </MenuBtn>

      {isZipFile(file) && (
        <MenuBtn onAction={() => onUnzip?.(file)}>
          <IoArchiveOutline className="text-[#43BEFF]" />
          استخراج (Unzip)
        </MenuBtn>
      )}

      <MenuBtn onAction={() => onShare?.(file)}>
        <LuShare2 className="text-[#43BEFF]" />
        اشتراک‌گذاری
      </MenuBtn>

      <MenuBtn onAction={() => onDownload?.(file)}>
        <LuDownload className="text-[#43BEFF]" />
        دانلود
      </MenuBtn>

      <MenuBtn onAction={() => onMove?.(file)}>
        <IoFolderOpen className="text-[#43BEFF]" />
        انتقال به پوشه
      </MenuBtn>

      <MenuBtn onAction={() => onToggleStar?.(file)}>
        {file.is_starred ? <FaStar className="text-yellow-500" /> : <FaRegStar className="text-[#43BEFF]" />}
        {file.is_starred ? "حذف از ستاره‌دارها" : "افزودن به ستاره‌دارها"}
      </MenuBtn>

      {!file.in_trash ? (
        <MenuBtn onAction={() => onTrashOrRestore?.(file, "trash")}>
          <LuTrash2 className="text-[#43BEFF]" />
          انتقال به سطل زباله
        </MenuBtn>
      ) : (
        <MenuBtn onAction={() => onTrashOrRestore?.(file, "restore")}>
          <LuCornerUpLeft className="text-[#43BEFF]" />
          بازگردانی از سطل زباله
        </MenuBtn>
      )}

      <MenuBtn danger onAction={() => onHardDelete?.(file)}>
        <LuTrash2 />
        حذف دائمی
      </MenuBtn>
    </div>
  );
}

export function FolderMenu({
  folder,
  onDetails,
  onRename,
  onZip,
  onToggleStar,
  onTrashOrRestore,
  onHardDelete,
  onOpenColorModal,
}) {
  return (
    <div className="flex flex-col gap-1">
      <MenuBtn onAction={() => onDetails?.("folder", folder)}>
        <LuInfo className="text-[#43BEFF]" />
        جزئیات
      </MenuBtn>

      <MenuBtn onAction={() => onRename?.(folder)}>
        <LuPencil className="text-[#43BEFF]" />
        تغییر نام
      </MenuBtn>

      <MenuBtn onAction={() => onOpenColorModal?.(folder)}>
        <LuPencil className="text-[#43BEFF]" />
        تغییر رنگ
      </MenuBtn>

      <MenuBtn
        onAction={() =>
          onZip?.({
            type: "folder",
            id: getFolderId(folder),
            name: folder?.name || "folder",
          })
        }
      >
        <IoArchiveOutline className="text-[#43BEFF]" />
        فشرده‌سازی (Zip)
      </MenuBtn>

      <MenuBtn onAction={() => onToggleStar?.(folder)}>
        {folder.is_starred ? <FaStar className="text-yellow-500" /> : <FaRegStar className="text-[#43BEFF]" />}
        {folder.is_starred ? "حذف از ستاره‌دارها" : "افزودن به ستاره‌دارها"}
      </MenuBtn>

      {!folder.in_trash ? (
        <MenuBtn onAction={() => onTrashOrRestore?.(folder, "trash")}>
          <LuTrash2 className="text-[#43BEFF]" />
          انتقال به سطل زباله
        </MenuBtn>
      ) : (
        <MenuBtn onAction={() => onTrashOrRestore?.(folder, "restore")}>
          <LuCornerUpLeft className="text-[#43BEFF]" />
          بازگردانی پوشه
        </MenuBtn>
      )}

      <MenuBtn danger onAction={() => onHardDelete?.(folder)}>
        <LuTrash2 />
        حذف دائمی
      </MenuBtn>
    </div>
  );
}
