import {
  Folder,
  FileText,
  Image,
  FileCode,
  File,
  FileType,
  BookOpen,
  Film,
} from "lucide-react";

const EXT_MAP = {
  // Docs
  md: { icon: FileText, color: "#2980b9", label: "Markdown" },
  txt: { icon: FileText, color: "#7f8c8d", label: "Text" },
  pdf: { icon: FileType, color: "#c0392b", label: "PDF" },
  doc: { icon: FileText, color: "#2980b9", label: "Word" },
  docx: { icon: FileText, color: "#2980b9", label: "Word" },
  // Code
  py: { icon: FileCode, color: "#27ae60", label: "Python" },
  js: { icon: FileCode, color: "#d4a843", label: "JavaScript" },
  jsx: { icon: FileCode, color: "#d4a843", label: "React" },
  ts: { icon: FileCode, color: "#2980b9", label: "TypeScript" },
  tsx: { icon: FileCode, color: "#2980b9", label: "TypeScript" },
  cpp: { icon: FileCode, color: "#8e44ad", label: "C++" },
  c: { icon: FileCode, color: "#8e44ad", label: "C" },
  java: { icon: FileCode, color: "#d35400", label: "Java" },
  cs: { icon: FileCode, color: "#8e44ad", label: "C#" },
  // Images
  jpg: { icon: Image, color: "#16a085", label: "Image" },
  jpeg: { icon: Image, color: "#16a085", label: "Image" },
  png: { icon: Image, color: "#16a085", label: "Image" },
  gif: { icon: Image, color: "#16a085", label: "Image" },
  webp: { icon: Image, color: "#16a085", label: "Image" },
  svg: { icon: Image, color: "#16a085", label: "SVG" },
};

export default function FileIcon({ name, type, size = 20 }) {
  if (type === "dir") return <Folder size={size} color="#d4a843" />;
  const ext = name.split(".").pop()?.toLowerCase();
  const meta = EXT_MAP[ext] || { icon: File, color: "#7f8c8d" };
  const Icon = meta.icon;
  return <Icon size={size} color={meta.color} />;
}

export function getExtMeta(name) {
  const ext = name.split(".").pop()?.toLowerCase();
  return EXT_MAP[ext] || { icon: File, color: "#7f8c8d", label: "File" };
}

export function isText(name) {
  const ext = name.split(".").pop()?.toLowerCase();
  return [
    "md",
    "txt",
    "py",
    "js",
    "jsx",
    "ts",
    "tsx",
    "cpp",
    "c",
    "java",
    "cs",
    "json",
    "yaml",
    "yml",
    "sh",
    "bash",
    "html",
    "css",
  ].includes(ext);
}

export function isImage(name) {
  const ext = name.split(".").pop()?.toLowerCase();
  return ["jpg", "jpeg", "png", "gif", "webp", "svg"].includes(ext);
}

export function isPDF(name) {
  return name.toLowerCase().endsWith(".pdf");
}