"use client" import { useState, useCallback, useEffect } from "react" import { Button } from "@/components/ui/button" import { jobsApi, transformApiJobToFrontend } from "@/lib/api" import { Job } from "@/lib/types" import Link from "next/link" import { ArrowRight, CheckCircle2, ChevronLeft, ChevronRight } from "lucide-react" import Image from "next/image" import { motion } from "framer-motion" import { useTranslation } from "@/lib/i18n" import { Navbar } from "@/components/navbar" import { Footer } from "@/components/footer" import { HomeSearch } from "@/components/home-search" import { JobCard } from "@/components/job-card" import useEmblaCarousel from "embla-carousel-react" export default function Home() { const { t } = useTranslation() const [jobs, setJobs] = useState([]) const [loading, setLoading] = useState(true) const [emblaRef, emblaApi] = useEmblaCarousel({ align: "start", loop: false, skipSnaps: false, dragFree: true }) const [moreJobsEmblaRef, moreJobsEmblaApi] = useEmblaCarousel({ align: "start", loop: false, skipSnaps: false, dragFree: true }) const [prevBtnDisabled, setPrevBtnDisabled] = useState(true) const [nextBtnDisabled, setNextBtnDisabled] = useState(true) const [moreJobsPrevBtnDisabled, setMoreJobsPrevBtnDisabled] = useState(true) const [moreJobsNextBtnDisabled, setMoreJobsNextBtnDisabled] = useState(true) useEffect(() => { async function fetchJobs() { try { const res = await jobsApi.list({ limit: 8 }) if (res.data) { setJobs(res.data.map(transformApiJobToFrontend)) } } catch (error) { console.error("Failed to fetch jobs:", error) } finally { setLoading(false) } } fetchJobs() }, []) const scrollPrev = useCallback(() => { if (emblaApi) emblaApi.scrollPrev() }, [emblaApi]) const scrollNext = useCallback(() => { if (emblaApi) emblaApi.scrollNext() }, [emblaApi]) const scrollMoreJobsPrev = useCallback(() => { if (moreJobsEmblaApi) moreJobsEmblaApi.scrollPrev() }, [moreJobsEmblaApi]) const scrollMoreJobsNext = useCallback(() => { if (moreJobsEmblaApi) moreJobsEmblaApi.scrollNext() }, [moreJobsEmblaApi]) const onSelect = useCallback((emblaApi: any) => { setPrevBtnDisabled(!emblaApi.canScrollPrev()) setNextBtnDisabled(!emblaApi.canScrollNext()) }, []) const onMoreJobsSelect = useCallback((emblaApi: any) => { setMoreJobsPrevBtnDisabled(!emblaApi.canScrollPrev()) setMoreJobsNextBtnDisabled(!emblaApi.canScrollNext()) }, []) useEffect(() => { if (!emblaApi) return onSelect(emblaApi) emblaApi.on("reInit", onSelect) emblaApi.on("select", onSelect) }, [emblaApi, onSelect]) useEffect(() => { if (!moreJobsEmblaApi) return onMoreJobsSelect(moreJobsEmblaApi) moreJobsEmblaApi.on("reInit", onMoreJobsSelect) moreJobsEmblaApi.on("select", onMoreJobsSelect) }, [moreJobsEmblaApi, onMoreJobsSelect]) return (
{/* Hero Section */}
Background
{t("home.hero.title")}
{t("home.hero.titleLine2")}
{t("home.hero.subtitle")}
{/* Search Section */}
{/* Latest Jobs Section */}

{t("home.featuredJobs.title")}

{loading ? (
Carregando vagas...
) : jobs.slice(0, 8).map((job, index) => (
))}
{/* More Jobs Section */}

{t("home.moreJobs.title")}

{loading ? (
Carregando vagas...
) : jobs.slice(0, 8).map((job, index) => (
))}
{/* Bottom CTA Section */}

{t("home.cta.title")}

{t("home.cta.subtitle")}

Professional
) }