import styles from "./Projects.module.scss";

import React, { useState } from "react";

import Head from "next/head";

import { useTranslation } from "next-i18next";

import AppContext from "../../particles/contexts/app-context";
import AppTemplate from "../../templates/app";
import Footer from "../../organisms/footer";
import Header from "../../organisms/header";
import Button from "../../atoms/button";
import ProjectCard from "../../molecules/project-card";
import Carousel from "../../containers/carousel";

const getFilteredProjects = (selectedId: any, projects: any) => {
  if (selectedId === "all") {
    return projects;
  }

  return projects.filter((project: any) => project.category_id === selectedId);
};

const ProjectsPage = ({ projects, categories, appData }: any) => {
  const { t } = useTranslation("common");

  const [selectedId, setSelectedId] = useState("all");

  const newCategories = [{ id: "all", name: t("All") }, ...categories];

  const filteredProjects = getFilteredProjects(selectedId, projects);

  return (
    <AppContext.Provider value={appData}>
      <AppTemplate header={<Header />} footer={<Footer />}>
        <Head>
          <title>BASS</title>
        </Head>

        <main className={styles.main}>
          <div className="mt-10 mb-12">
            <div className="container">
              <div className="mb-8">
                <div className="lg:flex items-baseline">
                  <h1 className="ltr:mr-6 rtl:ml-6 mb-4 text-gradiant">{t("Projects")}</h1>

                  <hr className="w-40 md:w-60 ltr:mr-6 rtl:ml-6 border-color-2" />
                </div>
              </div>

              <div className="categories">
                <Carousel
                  items={newCategories}
                  pagination={{ clickable: true }}
                  isAutoWidth
                  spaceBetween={20}
                  slidesPerView="auto"
                >
                  {({ id, name }: any) => (
                    <div className="pb-20">
                      <Button
                        key={id}
                        size="small"
                        pagination={{ clickable: true }}
                        onClick={() => setSelectedId(id)}
                        selected={id === selectedId}
                      >
                        {name}
                      </Button>
                    </div>
                  )}
                </Carousel>
              </div>

              {filteredProjects.length === 0 && (
                <div className="flex justify-center text-xl">{t("No data found!")}</div>
              )}

              {filteredProjects.length !== 0 && (
                <div className="md:flex flex-wrap gap-10">
                  {filteredProjects.map(({ id, name, img }: any) => (
                    <div key={id} className="mb-18">
                      <ProjectCard id={id} name={name} img={img} />
                    </div>
                  ))}
                </div>
              )}
            </div>
          </div>
        </main>
      </AppTemplate>
    </AppContext.Provider>
  );
};

export default ProjectsPage;
