import type { NextPage, GetServerSideProps } from 'next';
import { serverSideTranslations } from 'next-i18next/serverSideTranslations';
import { Fragment } from 'react';
import { useTranslation } from 'next-i18next';
import Header from '@/components/templates/layout/header';
import Footer from '@/components/templates/layout/Footer';

import Head from 'next/head';
import { getReviews } from '@/data/reviews';
import { getProject } from '@/data/projects';
import Welcome from '@/components/templates/projects/Welcome';
import Premises from '@/components/templates/projects/Premises';
import CommonAreas from '@/components/templates/projects/CommonAreas';
import Reviews from '@/components/templates/projects/Reviews';
import BusinessPartners from '@/components/templates/projects/BusinessPartners';
import Gallery from '@/components/templates/projects/Gallery';
import Downloads from '@/components/templates/projects/Downloads';
import GalleryCarousel from '@/components/templates/projects/GalleryCarousel';
import Navbar from '@/components/templates/projects/Navbar';
import Map from '@/components/templates/projects/Map';

import BannerSliderWithprojects from '@/components/templates/layout/BannerSliderWithCities';
import Location from '@/components/templates/projects/Location';
import Image from 'next/image';
import { apiUrl } from '@/data/constants';
import AvailabilityIframe from '@/components/templates/projects/AvailabilityIframe';
import { getCities } from '@/data/cities';
import ContactForm from '@/components/organisms/projects/ContactForm';
import Newsletter from '@/components/templates/layout/Newsletter';
import ArticlesCarouselWithtext from '@/components/templates/layout/ArticlesCarouselWithtext';

type PageProps = { reviews: any[]; project: any; locale: any; cities: any[]; articles: any[] };

// Agregamos `locale` a la desestructuración de las props
const Page: NextPage<PageProps> = ({ reviews, project, cities, locale, articles }) => {
  const { t } = useTranslation(['common', 'projects']);

  const projectSliders = project?.projectSliders;

  // Lógica de idiomas: Si es inglés toma el campo "En", sino el campo por defecto
  const welcomeText = locale === 'en' ? project?.welcomeText2En : project?.welcomeText2;
  const welcomePreTitle = locale === 'en' ? project?.welcomePreTitleEn : project?.welcomePreTitle;

  console.log("Idioma actual:", locale);
  console.log("Campo EN:", project?.welcomeText2En);
  console.log("Campo ES:", project?.welcomeText2);

  return (
    <Fragment>
      <Head>
        <title>{project?.metaTitle}</title>
        <meta name="description" content={project?.metaDescription} />
        <meta name="keywords" content={project?.metaKeywords} />
      </Head>
      <Header sticky={false} slug={project?.slug} categories={cities} />
      <div className="tw-relative max-[991px]:tw-flex max-[991px]:tw-flex-col-reverse max-[991px]:tw-relative">
        {project?.logo ? (
          <Image
            src={apiUrl + project?.logo?.url}
            width={project?.logo?.width}
            height={project?.logo?.height}
            alt="logo proyecto"
            className="max-[991px]:tw-hidden tw-max-w-[208px] tw-absolute tw-top-10 tw-left-0 tw-right-0 tw-w-full tw-mx-auto tw-z-20 mx-auto "
          />
        ) : (
          ''
        )}
        <div>
          <BannerSliderWithprojects isSmaller={true} items={projectSliders} />{' '}
        </div>
        <div>
          <Navbar logo={project?.logo} darkColor={project?.darkColor} lightColor={project?.lightColor} trans={t} />
        </div>
      </div>
      
      {/* Pasamos a usar la variable `welcomeText` en lugar de project?.welcomeText2 estático */}
      {project?.welcomeTitle ||
        welcomeText ||
        (project?.projectFacts &&
          project?.projectFacts?.length &&
          project?.projectFacts?.filter((item: any) => item?.category === 'welcome')?.length) ? (
        <Welcome
          preTitle={welcomePreTitle} // Usamos la variable traducida
          title={project?.name}
          text={welcomeText}         // Usamos la variable traducida
          darkColor={project?.darkColor}
          lightColor={project?.lightColor}
          facts={project?.projectFacts?.filter((item: any) => item?.category === 'welcome')}
        />
      ) : (
        ''
      )}{' '}
      
      {(project?.welcomeGallery && project?.welcomeGallery?.length && (
        <GalleryCarousel
          darkColor={project?.darkColor}
          lightColor={project?.lightColor}
          elements={project?.welcomeGallery}
        />
      )) ||
        ''}{' '}
      {project?.projectLinks && project?.projectLinks?.length ? (
        <Downloads
          //preTitle={t('projects:projectIn.downloadsPreTitle')}
          title={t('projects:projectIn.downloadsPreTitle')}
          image={project?.downloadsImage}
          darkColor={project?.darkColor}
          lightColor={project?.lightColor}
          links={project?.projectLinks && project?.projectLinks?.length ? project?.projectLinks?.filter((link: any) => link?.url && link?.url !== "#") : []}
        />
      ) : (
        ''
      )}
      {project?.locationPreTitle || project?.locationTitle || project?.locationText || project?.locationImage ? (
        <Location
          preTitle={project?.locationPreTitle}
          title={project?.locationTitle}
          text={project?.locationText}
          darkColor={project?.darkColor}
          lightColor={project?.lightColor}
          image={project?.locationImage}
        />
      ) : (
        ''
      )}{' '}
      {(project?.projectFacts &&
        project?.projectFacts?.length &&
        project?.projectFacts?.filter((item: any) => item?.category === 'premise')?.length) ||
        project?.premisesText ||
        project?.premisesTitle ? (
        <Premises
          preTitle={t('projects:projectIn.premisesPreTitle')}
          title={project?.premisesTitle}
          text={project?.premisesText}
          darkColor={project?.darkColor}
          lightColor={project?.lightColor}
          premises={
            project?.projectFacts && project?.projectFacts?.length
              ? project?.projectFacts?.filter((item: any) => item?.category === 'premise')
              : []
          }
        />
      ) : (
        ''
      )}
      {project?.mapImage || project?.mapTitle || project?.mapText ? (
        <Map
          preTitle={t('projects:projectIn.mapPreTitle')}
          title={project?.mapTitle}
          text={project?.mapText}
          image={project?.mapImage}
          darkColor={project?.darkColor}
          lightColor={project?.lightColor}
          trans={t}
          mapLink={project?.mapLink}
        />
      ) : (
        ''
      )}
      {project?.projectCommonAreas && project?.projectCommonAreas?.length ? (
        <CommonAreas
          preTitle={t('projects:projectIn.commonAreasPreTitle')}
          title={t('projects:projectIn.commonAreasTitle')}
          darkColor={project?.darkColor}
          lightColor={project?.lightColor}
          image={project?.commonAreasImage}
          commonAreas={project?.projectCommonAreas}
          trans={t}
        />
      ) : (
        ''
      )}
      {project?.availabilityLink && project?.availabilityLink !== "#" ? (
        <AvailabilityIframe url={project?.availabilityLink} />
      ) : (
        ''
      )}
      {/*project?.projectPartners && project?.projectPartners?.length ? (
        <BusinessPartners
          preTitle={t('projects:projectIn.businessPartnersPreTitle')}
          title={t('projects:projectIn.businessPartnersTitle')}
          darkColor={project?.darkColor}
          lightColor={project?.lightColor}
          businessPartners={project?.projectPartners}
        />
      ) : (
        ''
      ) */}
      {project?.galleryCategories && project?.galleryCategories?.length ? (
        <Gallery
          preTitle={t('projects:projectIn.galleryPreTitle')}
          title={t('projects:projectIn.galleryTitle')}
          darkColor={project?.darkColor}
          lightColor={project?.lightColor}
          categories={
            project?.galleryCategories && project?.galleryCategories?.length
              ? [{ name: t('common:all'), slug: 'all' }, ...project?.galleryCategories]
              : []
          }
          gallery={project?.galleryImages}
          classNameId="GalleryProjects"
          trans={t}
        />
      ) : (
        ''
      )}
      {(reviews && reviews?.length && (
        <Reviews
          preTitle={t('projects:projectIn.reviewsPreTitle')}
          title={t('projects:projectIn.reviewsTitle')}
          items={reviews}
          darkColor={project?.darkColor}
          lightColor={project?.lightColor}
        />
      )) ||
        ''}{' '}
      {(articles && articles?.length && (
        <ArticlesCarouselWithtext
          articles={articles}
          preTitle={t('locations:blog.preTitle')}
          title={t('locations:blog.title')}
        />
      )) || ''}
      <ContactForm trans={t} cities={cities} background={project?.lightColor} />
      <Newsletter background={project?.darkColor} />
      <Footer cities={cities} />
    </Fragment>
  );
};

export const getServerSideProps: GetServerSideProps = async (context) => {
  const { locale, query } = context;
  const { slug } = query;
  const project: any = await getProject({ locale, slug });
  const reviews = (await getReviews({ locale: locale, projectSlug: slug })) || [];

  const cities = await getCities(locale);
  if (!project) {
    return {
      redirect: {
        destination: locale === 'es' ? '/desarrollos' : '/en/developments',
        permanent: false
      }
    };
  }

  const stripHtml = (htmlString: string) => {
    if (!htmlString) return '';
    return htmlString.replace(/<\/?[^>]+(>|$)/g, '');
  };

  let articles: any[] = [];
  try {
    const wpRes = await fetch('https://horizonte.grupovelas.com/wp-json/wp/v2/posts?_embed&per_page=4');
    if (wpRes.ok) {
      const wpData = await wpRes.json();
      articles = wpData.map((post: any) => {
        let featuredImage = '/images/blogs/banner-blog.webp';
        if (post._embedded?.['wp:featuredmedia']?.[0]) {
          featuredImage = post._embedded['wp:featuredmedia'][0].source_url || featuredImage;
        }
        return {
          id: post.id,
          title: stripHtml(post.title?.rendered || ''),
          excerpt: stripHtml(post.excerpt?.rendered || ''),
          image: featuredImage,
          slug: post.slug,
          date: post.date,
          externalLink: post.link || post.guid?.rendered || '#'
        };
      });
    }
  } catch (error) {
    console.error('Error al obtener artículos de WP para desarrollo:', error);
    articles = [];
  }

  return {
    props: {
      ...(await serverSideTranslations(locale ?? 'es', ['projects', 'common', 'routes', 'inventory', 'locations'])),
      cities,
      reviews,
      project,
      locale,
      articles,
    }
  };
};

export default Page;