import React, { useEffect, useMemo, useState } from "react";
import Search from "../../ui/inputs/Search";
import vehicle from "../../../assets/image/vehicles.png";
import workStation from "../../../assets/image/workStation.png";
import machines from "../../../assets/image/machines.png";
import feneration from "../../../assets/image/feneration.png";
import worker from "../../../assets/image/worker.png";
import { getCategoryAsset } from "../../../services/factoryBuilder/assest/assets/getCategoryAsset";
import arch from "../../../assets/gltf-glb/arch.glb";
import door from "../../../assets/gltf-glb/door.glb";
import window from "../../../assets/gltf-glb/window.glb";
import { useSelectedItem } from "../../../store/store";
interface AssetProp {
  filename: string;
  thumbnail?: string;
  category: string;
  description?: string;
  tags?: string;
  url?: String;
  uploadDate?: number;
  isArchieve?: boolean;
  animated?: boolean;
  price?: number;
  CreatedBy?: String;
}
const Assets: React.FC = () => {
  const { setSelectedItem } = useSelectedItem();
  const [searchValue, setSearchValue] = useState<string>("");
  const [selectedCategory, setSelectedCategory] = useState<string | null>(null);
  const [filteredAsset, setFilteredAsset] = useState<AssetProp[]>([]);

  const handleSearchChange = (value: string) => {
    setSearchValue(value);
    setSelectedCategory(null); // Reset selected category when search changes
  };

  const categoryList = useMemo(
    () => [
      {
        assetName: "Doors",
        assetImage: "",
        category: "Feneration",
        categoryImage: feneration,
      },
      {
        assetName: "Windows",
        assetImage: "",
        category: "Feneration",
        categoryImage: feneration,
      },
      {
        assetName: "Pillars",
        assetImage: "",
        category: "Feneration",
        categoryImage: feneration,
      },
      { category: "Vehicles", categoryImage: vehicle },
      { category: "Workstation", categoryImage: workStation },
      { category: "Machines", categoryImage: machines },
      { category: "Workers", categoryImage: worker },
    ],
    []
  );

  const fetchCategoryAssets = async (asset: any) => {
    setSelectedCategory(asset);
    if (asset === "Feneration") {
      const localAssets: AssetProp[] = [
        {
          filename: "arch",
          category: "Feneration",
          url: arch,
        },
        {
          filename: "door",
          category: "Feneration",
          url: door,
        },
        {
          filename: "window",
          category: "Feneration",
          url: window,
        },
      ];
      setFilteredAsset(localAssets);
    } else {
      try {
        const res = await getCategoryAsset(asset);
        setFilteredAsset(res || []); // Ensure it's always an array
      } catch (error) { }
    }
  };

  useEffect(() => { }, [filteredAsset]);
  return (
    <div className="assets-container">
      <Search onChange={handleSearchChange} />
      {searchValue ? (
        <div className="searched-content">
          <p>Results for "{searchValue}"</p>
        </div>
      ) : selectedCategory ? (
        <div className="assets-wrapper">
          {/* Back Button */}
          <div
            className="back-button"
            onClick={() => {
              setSelectedCategory(null);
              setFilteredAsset([]);
            }}
          >
            ← Back
          </div>
          <h2>{selectedCategory}</h2>
          <div className="assets-container">
            {filteredAsset &&
              filteredAsset?.map((asset: any, index: number) => (
                <div key={index} className="assets">
                  {asset?.thumbnail && (
                    <img
                      src={asset?.thumbnail}
                      alt={asset.filename}
                      className="asset-image"
                      onPointerDown={() => setSelectedItem({ name: asset.filename, id: asset.modelfileID })}
                    />
                  )}
                  <div className="asset-name">
                    {asset.filename
                      .split("_")
                      .map(
                        (word: any) =>
                          word.charAt(0).toUpperCase() + word.slice(1)
                      )
                      .join(" ")}
                  </div>
                </div>
              ))}
          </div>
        </div>
      ) : (
        <div className="assets-wrapper">
          <h2>Categories</h2>
          <div className="categories-container">
            {Array.from(
              new Set(categoryList.map((asset) => asset.category))
            ).map((category, index) => {
              const categoryInfo = categoryList.find(
                (asset) => asset.category === category
              );
              return (
                <div
                  key={index}
                  className="category"
                  onClick={() => fetchCategoryAssets(category)}
                >
                  <img
                    src={categoryInfo?.categoryImage || ""}
                    alt={category}
                    className="category-image"
                  />
                  <div className="category-name">{category}</div>
                </div>
              );
            })}
          </div>
        </div>
      )}
    </div>
  );
};

export default Assets;
