"use client";

import { useState, useEffect } from "react";
import { ChevronLeft, ChevronRight } from "lucide-react";
import FadeIn from "@/components/animations/FadeIn";
import { Button } from "@/components/ui/button";
import { getSectorIcon } from "@/lib/sectorIconMap";
import { getClientsPageIndustrySectors } from "@/services/pages/public/clients/client";
import type { ClientsPageIndustrySector, ClientsPageMeta } from "@/services/pages/public/clients";

interface Props {
  initialData: ClientsPageIndustrySector[];
  initialMeta: ClientsPageMeta | null;
}

export function IndustrySectorsSection({ initialData, initialMeta }: Props) {
  const [page, setPage] = useState(1);
  const [data, setData] = useState(initialData);
  const [meta, setMeta] = useState(initialMeta);
  const [loading, setLoading] = useState(false);

  useEffect(() => {
    if (page === 1) {
      setData(initialData);
      setMeta(initialMeta);
      return;
    }
    setLoading(true);
    getClientsPageIndustrySectors(page)
      .then(({ data: d, meta: m }) => {
        setData(d);
        setMeta(m);
      })
      .finally(() => setLoading(false));
  }, [page]); // eslint-disable-line react-hooks/exhaustive-deps

  const lastPage = meta?.last_page ?? 1;

  return (
    <>
      <div
        className={`grid sm:grid-cols-2 lg:grid-cols-4 gap-6 transition-opacity duration-200 ${loading ? "opacity-50 pointer-events-none" : ""}`}
      >
        {data.map((sector, i) => {
          const SectorIcon = getSectorIcon(sector.icon);
          return (
            <FadeIn
              key={sector.title}
              y={20}
              duration={0.5}
              delay={(i % 4) * 0.1}
              className="petro-card p-7 group"
            >
              <div className="p-3 bg-secondary rounded-sm text-primary mb-4 w-fit group-hover:bg-primary group-hover:text-primary-foreground transition-colors">
                <SectorIcon size={24} />
              </div>
              <h3 className="font-bold text-foreground mb-2">{sector.title}</h3>
              <p className="text-sm text-muted-foreground leading-relaxed">{sector.description}</p>
            </FadeIn>
          );
        })}
      </div>

      {lastPage > 1 && (
        <div className="mt-10 flex items-center justify-center gap-4">
          <Button
            variant="outline"
            size="icon"
            disabled={page <= 1 || loading}
            onClick={() => setPage((p) => p - 1)}
          >
            <ChevronLeft className="h-4 w-4" />
          </Button>
          <span className="text-sm text-muted-foreground">
            Page {page} of {lastPage}
          </span>
          <Button
            variant="outline"
            size="icon"
            disabled={page >= lastPage || loading}
            onClick={() => setPage((p) => p + 1)}
          >
            <ChevronRight className="h-4 w-4" />
          </Button>
        </div>
      )}
    </>
  );
}
