import React, { useState, useEffect, Fragment } from "react";
import Cards from "./Cards";
import GroupCardsCollections from "./GroupCardsCollections";
import Link from "next/link";
import mecredApi from "@/axiosConfig";
import DownloadButton from "./DownloadButton";
import UsersPageCard from "./UsersPageCard";
import ShareButton from "./ShareButton";

/**
 * 
 * @param {Object} props
 * @param {Array.<Object>} props.data dados obtidos apartir do get do InfiniteScroll.js
 * @param {string} props.type informa se é recursos ou coleções, caso vazia retorna Collection  
 * @param {Function} props.setNewSize 
 * @param {boolean} props.newSize verifica se a tela teve o tamanho alterado
 * @returns renderixa na tela o conteúdo obtido pelo InfiniteScroll.js
 */
export default function InfiniteScrollCards({ setMecLoading, data, searchClass, setNewSize, newSize }) {
    const [cardsPerRow, setCardsPerRow] = useState(0);
    const [mecCollection, setMecCollection] = useState([]);
    /**
    *pega o tamanho da div de id "contentSize"
    */
    const getWidth = async () => {
        return document.getElementById('contentSize').scrollWidth;
    };

    /**
     * pega o tamanho da tela caso esse seja alterado
    */
    useEffect(() => {
        getWidth().then((res) => {
            setCardsPerRow(Math.floor(res / 273));
            setNewSize(false);
        });
    }, [newSize, setNewSize]);

    /**
     * get das coleções Oficiais do MEC
    */
    useEffect(() => {
    const fetchCollections = async () => {
        try {
            const { data } = await mecredApi
                .get("/users/35342/collections");
            setMecCollection([...data].reverse());
            setMecLoading(false);
        } catch (error) {
            console.error(error);
        }
    };

        fetchCollections();
    }, []);

    /**
     * função que conta o tempo decorrido desde a publicação do recurso
    */
    const timeFunction = (updated_time) => {
        let data = new Date(updated_time)
        let dataAtual = new Date();
        let time = dataAtual.getTime() - data.getTime();
        let dia = Math.floor(time / (1000 * 60 * 60 * 24));
        let ano;
        let mes;

        if ((ano = Math.floor(dia / 365)) > 0)
            return <span className="text-xs	">, há {ano} {ano === 1 ? "ano" : "anos"} </span>
        else if (((mes = Math.floor(dia / 31)) > 0))
            return <span className="text-xs	">, há {mes} {mes === 1 ? "mês" : "meses"}</span>

        if (dia === 0)
            return <span className="text-xs	">, hoje</span>
        return <span className="text-xs	">, há {dia} {dia === 1 ? "dia" : "dias"}</span>
    }

    function returnContent(type) {
        switch (type) {
            case "Collection":
                return (
                    <div className="justify-center ml-8">
                      {data?.map((item) => (
                        item.collection_items?.length > 0 && (
                          <div
                            key={item.id}
                            className="bg-white-HC-dark  outline outline-1 outline-ice-HC-white mb-10 pt-6 px-4 rounded-2xl relative"
                          >
                            {/* Cabeçalho com título, autor e botões */}
                            <div className="flex justify-between items-start">
                              {/* Título e autor */}
                              <div className="flex flex-col">
                                <p className="text-2xl font-bold mb-1 text-darkGray-HC-white-underline hover:underline">
                                  <Link href={`/colecao/${item.id}`}>{item.name}</Link>
                                </p>
                                <p className="ml-1 text-darkGray-HC-white">
                                  por{" "}
                                  <Link
                                    className="text-darkGray-HC-white-underline hover:underline"
                                    href={`/perfil/${item.owner.id}`}
                                  >
                                    {item.owner.name}
                                  </Link>
                                </p>
                              </div>
                  
                              {/* Botões */}
                              <div className="flex flex-row gap-2 justify-end">
                                <DownloadButton id={item.id} objects={item.collection_items} />
                                <ShareButton type="colecao" id={item.id} />
                              </div>
                            </div>
                  
                            {/* Cartões da coleção abaixo do cabeçalho */}
                            <div className="mt-4">
                              <GroupCardsCollections
                                cardsPerRow={cardsPerRow}
                                data={item.collection_items}
                                collectionId={item.id}
                              />
                            </div>
                          </div>)
                      ))}
                    </div>
                );


            case "LearningObject":
                return (
                    <div className="flex max-2xl:gap-4 gap-2 gap-y-4 flex-wrap ml-7 max-md:ml-0 max-md:justify-center">
                        {data?.map((item, index) => (
                            <Cards
                                id={item['id']}
                                key={item['id']}
                                title={item["name"]}
                                author={item["publisher"]["name"]}
                                authorId={item["publisher"]["id"]}
                                avatar={item["publisher"]["avatar"]}
                                image={item["thumbnail"]}
                                type={item["object_type"]}
                                updated_at={item["created_at"]}
                            />
                        ))}
                    </div>
                )

            case "MEC":
                return (
                    <div className="justify-center mt-5 ml-8">
                      {mecCollection?.map((item) => (
                        <div
                          key={item.id}
                          className="bg-white-HC-dark  outline outline-1 outline-ice-HC-white mb-10 pt-6 px-4 rounded-2xl relative"
                        >
                          {/* Cabeçalho com título, autor e botões */}
                          <div className="flex justify-between items-start">
                            {/* Título e autor */}
                            <div className="flex flex-col">
                              <p className="text-2xl font-bold mb-1 text-darkGray-HC-white hover:underline">
                                <Link href={`/colecao/${item.id}`}>{item.name}</Link>
                              </p>
                              <p className="ml-1 text-darkGray-HC-white">
                                por {" "}
                                <Link className="hover:underline" href={`/perfil/35342`}>
                                  Ministério da Educação
                                </Link>
                              </p>
                            </div>
                  
                            {/* Botões */}
                            <div className="flex flex-row gap-2 justify-end">
                              <DownloadButton id={item.id} objects={item.collection_items} />
                              <ShareButton type="colecao" id={item.id} />
                            </div>
                          </div>
                  
                          {/* Cartões da coleção abaixo do cabeçalho */}
                          <div className="mt-4">
                            <GroupCardsCollections
                              cardsPerRow={cardsPerRow}
                              data={item.collection_items}
                              collectionId={item.id}
                            />
                          </div>
                        </div>
                      ))}
                    </div>
                  );
                  
            case "User":
                return (
                    <div className="flex flex-wrap justify-center">
                        {data?.map((item, i) => {
                            return (
                                <Fragment key={i}>
                                    <UsersPageCard item={item} />
                                </Fragment>
                            )
                        })}
                    </div>
                )
        }
    }

    return (
        <div id="contentSize">
            {returnContent(searchClass)}
        </div>
    )
};