export const BLOCKED_CODE_EXTENSIONS = new Set([
  "py", "pyc", "pyo", "pyw", "pyx", "ipynb",
  "js", "mjs", "cjs", "jsx", "ts", "tsx",
  "php", "phtml", "php3", "php4", "php5",
  "rb", "erb",
  "pl", "pm",
  "lua",
  "sh", "bash", "zsh", "ksh", "fish",
  "ps1", "psm1", "psd1",
  "bat", "cmd",
  "vbs",
  "applescript",
  "ahk",
  "au3",
  "tcl",
  "c", "h", "cpp", "cc", "cxx", "hpp", "hh", "hxx",
  "cs", "vb",
  "java", "class", "jar",
  "go",
  "rs",
  "swift",
  "kt", "kts",
  "scala",
  "groovy", "gradle",
  "d",
  "nim",
  "cr",
  "zig",
  "v",
  "vhd", "vhdl",
  "asm", "s",
  "f", "f90", "f95", "for",
  "pas", "pp",
  "ada", "adb", "ads",
  "cob", "cbl",
  "hs", "lhs",
  "ml", "mli",
  "fs", "fsx", "fsi",
  "clj", "cljs", "cljc", "edn",
  "lisp", "lsp",
  "scm", "ss",
  "rkt",
  "ex", "exs",
  "erl", "hrl",
  "jl",
  "elm",
  "purs",
  "re", "rei",
  "sol",
  "move",
  "pro",
  "m",
  "html", "htm",
  "css", "scss", "sass", "less",
  "vue", "svelte",
  "json5",
  "o", "so", "dll", "exe", "dylib",
  "wasm", "wat", "bin",
  "out",
  "deb", "rpm",
  "app", "apk", "ipa",
  "sql", "psql",
  "ino", "pde",
  "sas", "do",
])

export function getAllExtensions(name: string): string[] {
  const parts = name.split(".")
  if (parts.length <= 1) return []
  return parts.slice(1).map((ext) => ext.toLowerCase())
}

export function hasBlockedCodeExtension(name: string): boolean {
  const exts = getAllExtensions(name)
  return exts.some((ext) => BLOCKED_CODE_EXTENSIONS.has(ext))
}

export function filterBlockedFiles<T extends { name: string }>(
  files: T[],
): { allowed: T[]; rejected: T[] } {
  const allowed: T[] = []
  const rejected: T[] = []
  for (const f of files) {
    if (hasBlockedCodeExtension(f.name)) {
      rejected.push(f)
    } else {
      allowed.push(f)
    }
  }
  return { allowed, rejected }
}
