"use client";

import { validateName } from "@/lib/utils";
import Image from "next/image";
import { useEffect, useRef } from "react";
import { Socket } from "socket.io-client";

export default function New({
  socket,
  type,
  stopEditing,
  addNew,
}: {
  socket: Socket;
  type: "file" | "folder";
  stopEditing: () => void;
  addNew: (name: string, type: "file" | "folder") => void;
}) {
  const inputRef = useRef<HTMLInputElement>(null);

  function createNew() {
    const name = inputRef.current?.value;

    if (name) {
      const valid = validateName(name, "", type);
      if (valid.status) {
        if (type === "file") {
          socket.emit(
            "createFile",
            name,
            ({ success }: { success: boolean }) => {
              if (success) {
                addNew(name, type);
              }
            }
          );
        } else {
          socket.emit("createFolder", name, () => {
            addNew(name, type);
          });
        }
      }
    }
    stopEditing();
  }

  useEffect(() => {
    inputRef.current?.focus();
  }, []);

  return (
    <div className="w-full flex items-center h-7 px-1 hover:bg-secondary rounded-sm cursor-pointer transition-colors focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring">
      <Image
        src={
          type === "file"
            ? "/icons/default_file.svg"
            : "/icons/default_folder.svg"
        }
        alt="File Icon"
        width={18}
        height={18}
        className="mr-2"
      />
      <form
        onSubmit={(e) => {
          e.preventDefault();
          createNew();
        }}
      >
        <input
          ref={inputRef}
          className={`bg-transparent transition-all focus-visible:outline-none focus-visible:ring-offset-2 focus-visible:ring-offset-background focus-visible:ring-2 focus-visible:ring-ring rounded-sm w-full`}
          onBlur={() => createNew()}
        />
      </form>
    </div>
  );
}