import Link from 'next/link';
import { FC, Fragment, Key, useEffect, useRef, useState } from 'react';
import useSticky from 'hooks/useSticky';
import NextLink from 'components/atoms/NextLink';
import logo from '@/../public/images/Home-Logo-Head.svg';
import Image from 'next/image';
import hamburguer from '@/../public/images/layout/hamburguer-white.svg';
import DropdownToggleLink from '@/components/atoms/DropdownToggleLink';
import arrow from '@/../public/images/layout/arrow-white.svg';
import facebookIcon from '@/../public/images/home/Facebook.svg';
import instagramIcon from '@/../public/images/home/Instagram.svg';
import tiktokIcon from '@/../public/images/home/Tik_Tok.svg';
import ListItemLink from '@/components/atoms/ListItemLink';
import classNames from 'classnames';
import useScrollLockOnElementClass from '@/hooks/useScrollLockOnElementClass';

import { useRouter } from 'next/router';
type NavbarProps = {
  sticky?: boolean;
  stickyBox?: boolean;
  navClassName?: string;
  navOtherClass?: string;
  translatedPath: string;
  locale: string;
  trans: any;
  categories: any;
};

const Navbar: FC<NavbarProps> = (props) => {
  const { navClassName, navOtherClass, stickyBox, translatedPath = '#', locale = 'es', trans, categories = [] } = props;
  useScrollLockOnElementClass('offcanvas-nav', 'show');
  const useStickyHook = useSticky(150);
  const sticky = props?.sticky ? useStickyHook : false;
  const navbarRef = useRef<HTMLElement | null>(null);
  const fixedClassName = 'navbar navbar-expand-lg center-nav transparent navbar-clone fixed';
  const router = useRouter();

  useEffect(() => {

    const bootstrap = require('bootstrap');

    const handleRouteChange = () => {
      const offcanvasElement = document.getElementById('offcanvas-nav');
      if (offcanvasElement) {
        const offcanvas = bootstrap.Offcanvas.getInstance(offcanvasElement) || new bootstrap.Offcanvas(offcanvasElement);
        offcanvas.hide();
      }
    };

    router.events.on('routeChangeStart', handleRouteChange);
    return () => {
      router.events.off('routeChangeStart', handleRouteChange);
    };
  }, [router.events]);
  // Manejadores para mostrar/ocultar el submenú
  const [isSubmenuVisible, setSubmenuVisible] = useState(false);
  const timeoutRef = useRef<NodeJS.Timeout | null>(null); // Para almacenar el temporizador de ocultación

  const handleMouseEnter = () => {
    if (timeoutRef.current) clearTimeout(timeoutRef.current); // Cancelar cualquier temporizador activo
    setSubmenuVisible(true);
  };

  const handleMouseLeave = () => {
    // Inicia un temporizador antes de ocultar el submenú
    timeoutRef.current = setTimeout(() => setSubmenuVisible(false), 300); // 200ms de retraso
  };

  const handleSubmenuEnter = () => {
    if (timeoutRef.current) clearTimeout(timeoutRef.current); // Cancela el temporizador al entrar al submenú
  };

  const handleSubmenuLeave = () => {
    // Inicia el temporizador para ocultar cuando el usuario sale del submenú
    timeoutRef.current = setTimeout(() => setSubmenuVisible(false), 300);
  };

  // Manejadores para mostrar/ocultar el submenú de Ciudades
  const [isCitiesSubmenuVisible, setCitiesSubmenuVisible] = useState(false);
  const citiesTimeoutRef = useRef<NodeJS.Timeout | null>(null);

  const handleCitiesMouseEnter = () => {
    if (citiesTimeoutRef.current) clearTimeout(citiesTimeoutRef.current);
    setCitiesSubmenuVisible(true);
  };

  const handleCitiesMouseLeave = () => {
    citiesTimeoutRef.current = setTimeout(() => setCitiesSubmenuVisible(false), 300);
  };

  const handleCitiesSubmenuEnter = () => {
    if (citiesTimeoutRef.current) clearTimeout(citiesTimeoutRef.current);
  };

  const handleCitiesSubmenuLeave = () => {
    citiesTimeoutRef.current = setTimeout(() => setCitiesSubmenuVisible(false), 300);
  };

  const headerContent = (
    <Fragment>
      <div className={navOtherClass}>
        <ul className="navbar-nav flex-row align-items-center ml-auto">
          <li className="nav-item   d-lg-none ">
            <Link
              href={translatedPath}
              className="font-ibm tw-text-white tw-text-xs  tw-px-2 tw-border-r tw-border-l tw-border-secondary-light"
            >
              {trans('common:topHeader.lang')}
            </Link>
          </li>
        </ul>
      </div>
      <div className="max-[991px]:tw-w-6/12  ">
        <div className="navbar-brand py-0 w-auto tw-flex tw-gap-2 tw-items-center fixed max-[991px]:tw-max-w-full max-[991px]:tw-justify-center">
          <NextLink href="/" title={<Image alt="logo" src={logo} className="max-[991px]:tw-max-w-full" />} />
        </div>
      </div>
      <div
        id="offcanvas-nav"
        data-bs-scroll="true"
        className="tw-bg-secondary-color navbar-collapse offcanvas offcanvas-nav offcanvas-top    max-[991px]:tw-pb-4 max-[991px]:!tw-absolute max-[991px]:!tw-h-max max-[991px]:tw-min-h-max max-[991px]:!tw-top-0"
      // className="tw-bg-secondary-color "
      >
        <div className="container offcanvas-header d-lg-none tw-py-3  tw-px-[0.75rem]">
          {' '}
          <Link
            href={translatedPath}
            className="font-ibm tw-text-white tw-text-xs  tw-px-2 tw-border-r tw-border-l tw-border-secondary-light"
          >
            {trans('common:topHeader.lang')}
          </Link>
          <div className="max-[991px]:tw-w-6/12 ">
            <NextLink href="/" title={<Image alt="logo" src={logo} className=" tw-w-auto" />} />
          </div>
          <button
            //type="button"
            // aria-label="Close"
            style={{ color: 'white' }}
            data-bs-dismiss="offcanvas"
            className="tw-w-[40px] btn-close bg-none before:tw-bg-none before:tw-w-[0px] before:tw-h-[0px]"
          >
            <i className="uil uil-multiply tw-text-2xl"></i>
          </button>
        </div>

        <div className="offcanvas-body ms-lg-auto d-flex flex-column h-100    max-[991px]:tw-mx-auto max-[991px]:tw-max-w-[720px] max-[991px]:tw-px-0 max-[767px]:tw-max-w-[540px]">
          <ul className="navbar-nav tw-flex tw-flex-wrap tw-gap-4 ">
            <li className="nav-item max-[991px]:tw-px-[0.75rem]">
              <Link
                className="tw-uppercase tw-font-ibm tw-text-main-light hover:tw-text-secondary-light tw-text-base tw-font-normal"
                href="/"
              >
                {trans('common:header.home')}
              </Link>
            </li>
            <li className="nav-item max-[991px]:tw-px-[0.75rem]">
              <Link
                className="tw-uppercase tw-font-ibm tw-text-main-light hover:tw-text-secondary-light tw-text-base tw-font-normal"
                href={trans('routes:/about-us')}
              >
                {trans('common:header.about-us')}
              </Link>
            </li>
            <li
              className="nav-item max-[991px]:tw-px-[0.75rem] max-[991px]:tw-hidden"
              onMouseEnter={handleMouseEnter}
              onMouseLeave={handleMouseLeave}
            >
              <Link
                className="tw-uppercase tw-font-ibm tw-text-main-light hover:tw-text-secondary-light tw-text-base tw-font-normal"
                href={trans('routes:/developments')}
              >
                {trans('common:header.projects')}
              </Link>
            </li>
            {
              <li
                className={classNames(
                  { 'tw-text-main-color tw-font-bold': isSubmenuVisible },
                  'nav-item max-[991px]:tw-px-[0.75rem] min-[992px]:tw-hidden tw-uppercase tw-font-ibm tw-text-main-light hover:tw-text-secondary-light tw-text-base tw-font-normal tw-flex tw-items-center tw-justify-between'
                )}
                onClick={() => setSubmenuVisible(!isSubmenuVisible)}
              >
                {trans('common:header.projects')}{' '}
                {isSubmenuVisible ? (
                  <i className="uil uil-angle-up tw-text-3xl"></i>
                ) : (
                  <i className="uil uil-angle-down tw-text-3xl"></i>
                )}
              </li>
            }
            {categories.length && isSubmenuVisible ? (
              <ul className="tw-bg-[#37633D] min-[992px]:tw-hidden tw-p-4 tw-px-7">
                {categories &&
                  categories?.map((category: any, key: number) => {
                    return (
                      <li
                        key={key}
                        className="nav-item dropdown tw-py-2 tw-uppercase tw-font-medium tw-font-ibm tw-text-white hover:tw-text-main-color tw-text-base"
                      >
                        <DropdownToggleLink
                          title={category?.name}
                          className="tw-uppercase tw-font-ibm tw-text-white hover:tw-text-main-color tw-text-base "
                        />
                        <ul className="dropdown-menu  p-4 ">
                          {(category.projects &&
                            category.projects.map(
                              (project: {
                                redirectLink: string;
                                shouldRedirect: boolean;
                                id: Key;
                                name: string;
                                slug: string;
                              }) => (
                                <li key={project.id}>
                                  <ListItemLink
                                    linkClassName="py-1 nav-item   tw-uppercase tw-font-normal tw-font-ibm tw-text-white hover:tw-text-main-color tw-text-base"

                                    href={
                                      project.shouldRedirect
                                        ? project.redirectLink
                                        : trans('routes:/development') + '/' + project.slug
                                    }
                                    title={project.name}
                                    target={project.shouldRedirect ? '_blank' : '_self'}
                                  />
                                </li>
                              )
                            )) ||
                            ''}
                        </ul>
                      </li>
                    );
                  })}
              </ul>
            ) : (
              ''
            )}
            <li
              className="nav-item max-[991px]:tw-px-[0.75rem] max-[991px]:tw-hidden"
              onMouseEnter={handleCitiesMouseEnter}
              onMouseLeave={handleCitiesMouseLeave}
            >
              <Link
                className="tw-uppercase tw-font-ibm tw-text-main-light hover:tw-text-secondary-light tw-text-base tw-font-normal"
                href={trans('routes:/locations')}
              >
                {trans('common:header.cities')}
              </Link>
            </li>
            {
              <li
                className={classNames(
                  { 'tw-text-main-color tw-font-bold': isCitiesSubmenuVisible },
                  'nav-item max-[991px]:tw-px-[0.75rem] min-[992px]:tw-hidden tw-uppercase tw-font-ibm tw-text-main-light hover:tw-text-secondary-light tw-text-base tw-font-normal tw-flex tw-items-center tw-justify-between'
                )}
                onClick={() => setCitiesSubmenuVisible(!isCitiesSubmenuVisible)}
              >
                {trans('common:header.cities')}{' '}
                {isCitiesSubmenuVisible ? (
                  <i className="uil uil-angle-up tw-text-3xl"></i>
                ) : (
                  <i className="uil uil-angle-down tw-text-3xl"></i>
                )}
              </li>
            }
            {categories.length && isCitiesSubmenuVisible ? (
              <ul className="tw-bg-[#37633D] min-[992px]:tw-hidden tw-p-4 tw-px-7">
                {categories &&
                  categories?.map((city: any, key: number) => {
                    return (
                      <li
                        key={key}
                        className="nav-item tw-py-2 tw-uppercase tw-font-normal tw-font-ibm tw-text-white hover:tw-text-main-color tw-text-base"
                      >
                        <Link
                          className="tw-uppercase tw-font-ibm tw-text-white hover:tw-text-main-color tw-text-base"
                          href={'/' + city?.slug}
                        >
                          {city?.name}
                        </Link>
                      </li>
                    );
                  })}
              </ul>
            ) : (
              ''
            )}
           <li className="nav-item max-[991px]:tw-px-[0.75rem]">
              <Link
                className="tw-uppercase tw-font-ibm tw-text-main-light hover:tw-text-secondary-light tw-text-base tw-font-normal"
                href={trans('routes:/sustainability')}
              >
                {trans('common:header.sustainability')}
              </Link>
            </li>
            <li className="nav-item max-[991px]:tw-px-[0.75rem]">
  <a
    className="tw-uppercase tw-font-ibm tw-text-main-light hover:tw-text-secondary-light tw-text-base tw-font-normal"
    href="https://vacantes.grupovelas.com/"
    target="_blank"
    rel="noopener noreferrer"
  >
    {trans('common:header.talents')}
  </a>
</li>
            <li className="nav-item max-[991px]:tw-px-[0.75rem]">
              <Link
                className="min-[992px]:tw-border min-[992px]:tw-border-main-light min-[992px]:tw-py-2 min-[992px]:tw-px-4 min-[992px]:tw-rounded min-[992px]:hover:tw-bg-main-light min-[992px]:hover:tw-secondary-color tw-uppercase tw-font-ibm tw-text-main-light hover:tw-text-secondary-light tw-text-base tw-font-normal"
                href={trans('routes:/contact')}
              >
                {trans('common:header.contact')}
              </Link>
            </li>
            <li className="nav-item max-[991px]:tw-px-[0.75rem] tw-flex tw-items-center tw-gap-3">
              <a
                href="https://www.facebook.com/people/Grupo-Velas-Inmobiliaria/61584865130339/"
                target="_blank"
                rel="noopener noreferrer"
                className="hover:tw-opacity-75"
              >
                <Image src={facebookIcon} alt="Facebook" className="tw-w-5 tw-h-5 tw-brightness-0 tw-invert" />
              </a>
              <a
                href="https://www.instagram.com/grupovelasinmobiliaria/"
                target="_blank"
                rel="noopener noreferrer"
                className="hover:tw-opacity-75"
              >
                <Image src={instagramIcon} alt="Instagram" className="tw-w-5 tw-h-5 tw-brightness-0 tw-invert" />
              </a>
              <a
                href="https://www.tiktok.com/@grupovelasinmobiliaria"
                target="_blank"
                rel="noopener noreferrer"
                className="hover:tw-opacity-75"
              >
                <Image src={tiktokIcon} alt="TikTok" className="tw-w-5 tw-h-5 tw-brightness-0 tw-invert" />
              </a>
            </li>
            <li className="nav-item max-[991px]:tw-px-[0.75rem]  d-lg-none ">
              <Link
                href={trans('routes:/blog')}
                className="tw-uppercase tw-font-ibm tw-text-main-light hover:tw-text-secondary-light tw-text-base tw-font-normal"
              >
                {trans('common:topHeader.blog')}
              </Link>
            </li>
            { /* <li className="nav-item max-[991px]:tw-px-[0.75rem]  d-lg-none ">
              <Link
                href={trans('routes:/human-capital')}
                className="tw-uppercase tw-font-ibm tw-text-main-light hover:tw-text-secondary-light tw-text-base tw-font-normal"
              >
                {trans('common:header.human-capital')}
              </Link>
            </li> 
            <li className="nav-item max-[991px]:tw-px-[0.75rem]  d-lg-none ">
              <Link
                href={trans('routes:/agents')}
                className="tw-uppercase tw-font-ibm tw-text-main-light hover:tw-text-secondary-light tw-text-base tw-font-normal"
              >
                {trans('common:footer:agents')}
              </Link>
            </li>*/}
          </ul>
        </div>
      </div>
      <div className={navOtherClass}>
        <ul className="navbar-nav flex-row align-items-center tw-justify-end ms-auto tw-w-[40px]">
          <li className="nav-item  d-lg-none">
            <button data-bs-toggle="offcanvas" data-bs-target="#offcanvas-nav" className=" offcanvas-nav-btn ">
              <Image src={hamburguer} alt="hamburguer" />
            </button>
          </li>
        </ul>
      </div>
    </Fragment>
  );

  /* let menuLine1, menuLine2, menuLine3;

  if (categories.length === 1) {
    menuLine1 = [categories[0]];
  } else if (categories.length > 1) {
    menuLine1 = [categories[0], categories[1]];
  }
  if (categories.length > 3) {
    menuLine2 = [categories[2], categories[3]];
  }
  if (categories.length > 5) {
    menuLine3 = [categories[4], categories[5]];
  } */
  const columnCount = 3;

  // Ordenamos alfabéticamente por nombre
  const sortedCategories = [...categories].sort((a, b) =>
    a.name.localeCompare(b.name)
  );

  // Calculamos cuántos elementos por fila (aproximadamente)
  const itemsPerRow = Math.ceil(sortedCategories.length / columnCount);

  // Cortamos en filas
  const menuLines: any = [];
  for (let i = 0; i < columnCount; i++) {
    const start = i * itemsPerRow;
    const end = start + itemsPerRow;
    menuLines.push(sortedCategories.slice(start, end));
  }

  // Ahora tienes:
  const [menuLine1, menuLine2, menuLine3] = menuLines;
  return (
    <div>
      {stickyBox && <div style={{ paddingTop: sticky ? navbarRef.current?.clientHeight : 0 }} />}
      <nav ref={navbarRef} className={sticky ? fixedClassName : navClassName}>
        <div className="container flex-lg-row flex-nowrap align-items-center max-[991px]:tw-justify-between tw-py-3 !tw-static ">
          {headerContent}
        </div>
      </nav>

      {categories.length && isSubmenuVisible ? (
        <div
          id="project-submenu"
          className={`tw-bg-[#37633D]/[0.75] max-[991px]:tw-hidden tw-fixed tw-left-0 tw-z-30 tw-right-0 tw-w-full tw-max-w-7xl tw-block tw-mx-auto ${sticky ? 'tw-top-[77px]' : ''
            }`}
          onMouseEnter={handleSubmenuEnter}
          onMouseLeave={handleSubmenuLeave}
        >
          <div className="tw-container tw-mx-auto tw-py-10">
            <div className="tw-grid tw-grid-cols-12 tw-gap-1">
              <div className="tw-col-span-2 tw-col-start-2">
                <ul>
                  {menuLine1 &&
                    menuLine1?.map((category: { id: Key; name: string; projects: any; order: number }) => (
                      <>
                        <li
                          key={category.id}
                          className="tw-font-ibm tw-text-white tw-font-extrabold tw-text-base tw-uppercase tw-py-1"
                        >
                          {category.name}
                        </li>
                        {category.projects &&
                          category.projects.map(
                            (project: {
                              id: Key;
                              name: string;
                              slug: string;
                              shouldRedirect: boolean;
                              redirectLink: string;
                            }) => (
                              <li key={project.id}>
                                <Link
                                  className="tw-font-ibm tw-font-light tw-text-white tw-text-base tw-uppercase hover:tw-text-main-color"
                                  href={
                                    project.shouldRedirect
                                      ? project.redirectLink
                                      : trans('routes:/development') + '/' + project.slug
                                  }
                                  target={project.shouldRedirect ? '_blank' : '_self'}
                                >
                                  {project.name}
                                </Link>
                              </li>
                            )
                          )}
                        <li className="tw-mb-6"></li>
                      </>
                    ))}
                </ul>
              </div>
              <div className="tw-col-span-4 tw-col-start-5 tw-border-x tw-border-x-secondary-light">
                <ul className=" tw-w-1/2 tw-mx-auto">
                  {menuLine2 &&
                    menuLine2.map((category: { id: Key; name: string; projects: any; order: number }) => (
                      <>
                        <li
                          key={category.id}
                          className="tw-font-ibm tw-text-white tw-font-semibold tw-text-base tw-uppercase tw-py-1"
                        >
                          {category.name}
                        </li>
                        {category.projects &&
                          category.projects.map(
                            (project: {
                              id: Key;
                              name: string;
                              slug: string;
                              shouldRedirect: boolean;
                              redirectLink: string;
                            }) => (
                              <li key={project.id}>
                                <Link
                                  className="tw-font-ibm tw-font-light tw-text-white tw-text-base tw-uppercase hover:tw-text-main-color"
                                  href={
                                    project.shouldRedirect
                                      ? project.redirectLink
                                      : trans('routes:/development') + '/' + project.slug
                                  }
                                  target={project.shouldRedirect ? '_blank' : '_self'}
                                >
                                  {project.name}
                                </Link>
                              </li>
                            )
                          )}
                        <li className="tw-mb-6"></li>
                      </>
                    ))}
                </ul>
              </div>
              <div className="tw-col-span-2 tw-col-start-10">
                <ul>
                  {menuLine3 &&
                    menuLine3.map((category: { id: Key; name: string; projects: any; order: number }) => (
                      <>
                        <li
                          key={category.id}
                          className="tw-font-ibm tw-text-white tw-font-semibold tw-text-base tw-uppercase tw-py-1"
                        >
                          {category.name}
                        </li>
                        {category.projects &&
                          category.projects.map(
                            (project: {
                              id: Key;
                              name: string;
                              slug: string;
                              shouldRedirect: boolean;
                              redirectLink: string;
                            }) => (
                              <li key={project.id}>
                                <Link
                                  className="tw-font-ibm tw-font-light tw-text-white tw-text-base tw-uppercase hover:tw-text-main-color"
                                  href={
                                    project.shouldRedirect
                                      ? project.redirectLink
                                      : trans('routes:/development') + '/' + project.slug
                                  }
                                  target={project.shouldRedirect ? '_blank' : '_self'}
                                >
                                  {project.name}
                                </Link>
                              </li>
                            )
                          )}
                      </>
                    ))}
                  <li className="tw-mb-6"></li>
                </ul>
              </div>
            </div>
          </div>
        </div>
      ) : null}

      {categories.length && isCitiesSubmenuVisible ? (
        <div
          id="cities-submenu"
          className={`tw-bg-[#37633D]/[0.75] max-[991px]:tw-hidden tw-fixed tw-left-0 tw-z-30 tw-right-0 tw-w-full tw-max-w-7xl tw-block tw-mx-auto ${sticky ? 'tw-top-[77px]' : ''
            }`}
          onMouseEnter={handleCitiesSubmenuEnter}
          onMouseLeave={handleCitiesSubmenuLeave}
        >
          <div className="tw-container tw-mx-auto tw-py-10">
            <div className="tw-grid tw-grid-cols-12 tw-gap-1">
              <div className="tw-col-span-2 tw-col-start-2">
                <ul>
                  {menuLine1 &&
                    menuLine1?.map((city: { id: Key; name: string; slug: string }) => (
                      <li key={city.id} className="tw-mb-1">
                        <Link
                          className="tw-font-ibm tw-font-extrabold tw-text-white tw-text-base tw-uppercase hover:tw-text-main-color"
                          href={'/' + city.slug}
                        >
                          {city.name}
                        </Link>
                      </li>
                    ))}
                </ul>
              </div>
              <div className="tw-col-span-4 tw-col-start-5 tw-border-x tw-border-x-secondary-light">
                <ul className=" tw-w-1/2 tw-mx-auto">
                  {menuLine2 &&
                    menuLine2.map((city: { id: Key; name: string; slug: string }) => (
                      <li key={city.id} className="tw-mb-1">
                        <Link
                          className="tw-font-ibm tw-font-semibold tw-text-white tw-text-base tw-uppercase hover:tw-text-main-color"
                          href={'/' + city.slug}
                        >
                          {city.name}
                        </Link>
                      </li>
                    ))}
                </ul>
              </div>
              <div className="tw-col-span-2 tw-col-start-10">
                <ul>
                  {menuLine3 &&
                    menuLine3.map((city: { id: Key; name: string; slug: string }) => (
                      <li key={city.id} className="tw-mb-1">
                        <Link
                          className="tw-font-ibm tw-font-semibold tw-text-white tw-text-base tw-uppercase hover:tw-text-main-color"
                          href={'/' + city.slug}
                        >
                          {city.name}
                        </Link>
                      </li>
                    ))}
                </ul>
              </div>
            </div>
          </div>
        </div>
      ) : null}
    </div>
  );
};

Navbar.defaultProps = {
  sticky: true,
  stickyBox: true,
  navOtherClass: 'navbar-other  d-flex d-lg-none',
  navClassName: 'navbar navbar-expand-lg center-nav  navbar-light tw-z-[9999] tw-bg-secondary-color'
};

export default Navbar;
