"use client"

import { useEffect, useMemo, useState } from "react"
import Link from "next/link"
import { ArrowRight, Briefcase, ChevronLeft, ChevronRight, MapPin } from "lucide-react"
import { get } from "@/lib/api"

type Job = {
  job_id: string
  job_title: string
  city: string
  state: string
  department: string
  employee_type: string | null
  job_link: string
}

type Paginated<T> = {
  data: T[]
  current_page: number
  last_page: number
  total: number
}

type ApiEnvelope<T> = {
  success: boolean
  message: string
  data: T
}

const ROLES_PER_PAGE = 5

export default function CommunityOpenRoles({ community }: { community: string }) {
  const [jobs, setJobs] = useState<Job[]>([])
  const [page, setPage] = useState(1)
  const [totalPages, setTotalPages] = useState(1)
  const [loading, setLoading] = useState(true)
  const [error, setError] = useState(false)

  useEffect(() => {
    setPage(1)
  }, [community])

  useEffect(() => {
    let cancelled = false
    setLoading(true)
    setError(false)

    get<ApiEnvelope<Paginated<Job>>>("/job-requisitions", {
      params: { community, sortBy: "newest", page, per_page: ROLES_PER_PAGE },
    })
      .then((res) => {
        if (cancelled) return
        setJobs(res.data.data)
        setTotalPages(Math.max(1, res.data.last_page))
      })
      .catch(() => {
        if (cancelled) return
        setError(true)
        setJobs([])
        setTotalPages(1)
      })
      .finally(() => {
        if (!cancelled) setLoading(false)
      })

    return () => {
      cancelled = true
    }
  }, [community, page])

  const pageNumbers = useMemo(() => {
    if (totalPages <= 7) return Array.from({ length: totalPages }, (_, i) => i + 1)
    if (page <= 4) return [1, 2, 3, 4, 5, "...", totalPages]
    if (page >= totalPages - 3)
      return [1, "...", totalPages - 4, totalPages - 3, totalPages - 2, totalPages - 1, totalPages]
    return [1, "...", page - 1, page, page + 1, "...", totalPages]
  }, [page, totalPages])

  if (loading) {
    return (
      <div className="rounded-2xl border border-[#E4DFD2] bg-white p-8 text-center sm:p-10">
        <p className="text-sm font-light text-[#5F5F5F]">Loading open positions…</p>
      </div>
    )
  }

  if (error || jobs.length === 0) {
    return (
      <div className="flex flex-col items-start gap-6 rounded-2xl border border-[#E4DFD2] bg-white p-8 sm:flex-row sm:items-center sm:justify-between sm:p-10">
        {/* <div className="flex items-start gap-4">
          <div className="flex h-12 w-12 shrink-0 items-center justify-center rounded-xl bg-[#1D1D1D] text-[#B5A169]">
            <Briefcase size={20} aria-hidden="true" />
          </div>
         
        </div> */}
         <p className="w-full text-base text-center font-light leading-6 text-[#5F5F5F]">
            {error
              ? "We couldn't load open positions right now. Please try again shortly."
              : `There are no open positions at ${community} right now. Check back soon or browse all careers.`}
          </p>
        {/* <Link
          href={`/search-jobs?community=${encodeURIComponent(community)}`}
          className="inline-flex shrink-0 items-center gap-2 bg-[#1D1D1D] px-6 py-3 text-[11px] font-semibold uppercase tracking-widest text-white transition-colors hover:bg-[#B5A169]"
        >
          Browse All Careers
          <ArrowRight size={14} aria-hidden="true" />
        </Link> */}
      </div>
    )
  }

  return (
    <div className="space-y-4">
      {jobs.map((job) => (
        <article
          key={job.job_id}
          className="group flex flex-col gap-4 rounded-2xl border border-[#E4DFD2] bg-white p-6 transition-all duration-300 hover:border-[#B5A169] hover:shadow-lg sm:flex-row sm:items-center sm:justify-between"
        >
          <div className="min-w-0 flex-1">
            <h3 className="text-base font-semibold leading-snug text-[#1D1D1D] transition-colors group-hover:text-[#B5A169] sm:text-lg">
              {job.job_title}
            </h3>
            <div className="mt-2 flex flex-wrap items-center gap-3">
              <span className="inline-flex items-center gap-1.5 rounded-full border border-[#E4DFD2] bg-[#F8F8F6] px-3 py-1 text-xs font-semibold uppercase tracking-[0.15em] text-[#B5A169]">
                {job.department}
              </span>
              {job.employee_type && (
                <span className="text-xs font-medium uppercase tracking-[0.14em] text-[#888]">
                  {job.employee_type}
                </span>
              )}
              <p className="flex items-center gap-1.5 text-sm font-light text-[#5F5F5F]">
                <MapPin size={14} className="shrink-0 text-[#B5A169]" aria-hidden="true" />
                {job.city}, {job.state}
              </p>
            </div>
          </div>
          <a
            href={job.job_link}
            target="_blank"
            rel="noopener noreferrer"
            className="inline-flex shrink-0 items-center justify-center gap-2 whitespace-nowrap bg-[#B5A169] px-6 py-2.5 text-sm font-semibold uppercase tracking-widest text-[#1D1D1D] transition-all duration-300 hover:bg-[#1D1D1D] hover:text-white"
          >
            Apply <ArrowRight size={12} aria-hidden="true" />
          </a>
        </article>
      ))}

      {totalPages > 1 && (
        <nav
          aria-label="Open roles pages"
          className="flex items-center justify-center gap-1.5 pt-2"
        >
          <button
            onClick={() => setPage((p) => Math.max(1, p - 1))}
            disabled={page === 1}
            className="flex h-9 w-9 items-center justify-center border border-[#E4DFD2] text-[#1D1D1D] transition-colors hover:border-[#B5A169] hover:text-[#B5A169] disabled:cursor-not-allowed disabled:opacity-40"
            aria-label="Previous page"
          >
            <ChevronLeft size={16} />
          </button>

          {pageNumbers.map((p, i) =>
            p === "..." ? (
              <span
                key={`ellipsis-${i}`}
                className="flex h-9 w-9 items-center justify-center text-sm text-[#888]"
              >
                …
              </span>
            ) : (
              <button
                key={p}
                onClick={() => setPage(p as number)}
                className={`flex h-9 w-9 items-center justify-center border text-sm font-semibold transition-colors ${
                  p === page
                    ? "border-[#B5A169] bg-[#B5A169] text-[#1D1D1D]"
                    : "border-[#E4DFD2] text-[#1D1D1D] hover:border-[#B5A169] hover:text-[#B5A169]"
                }`}
                aria-label={`Page ${p}`}
                aria-current={p === page ? "page" : undefined}
              >
                {p}
              </button>
            )
          )}

          <button
            onClick={() => setPage((p) => Math.min(totalPages, p + 1))}
            disabled={page === totalPages}
            className="flex h-9 w-9 items-center justify-center border border-[#E4DFD2] text-[#1D1D1D] transition-colors hover:border-[#B5A169] hover:text-[#B5A169] disabled:cursor-not-allowed disabled:opacity-40"
            aria-label="Next page"
          >
            <ChevronRight size={16} />
          </button>
        </nav>
      )}
    </div>
  )
}
