"use client";

import { toast } from "sonner";
import { Cloud, Loader2 } from "lucide-react";
import { Button } from "@/components/ui/button";
import {
  useCreateGiteaRepo,
  useGitStatus,
  type CaseDetail,
} from "@/lib/api/cases";

export function CreateRepoButton({ data }: { data?: CaseDetail }) {
  const { data: gitStatus } = useGitStatus(data?.case_number);
  const createRepo = useCreateGiteaRepo(data?.case_number);

  if (!data?.case_number || !gitStatus) return null;

  /* Show only when something is actually missing — repo, remote, or
   * unpushed commits. If everything is in sync, the SyncIndicator already
   * communicates that. */
  const needsRepo = gitStatus.error === "no_repo" || !gitStatus.has_remote;
  if (!needsRepo) return null;

  function handleClick() {
    if (!data) return;
    createRepo.mutate(
      { title: data.title ?? "", description: data.subject ?? "" },
      {
        onSuccess: (res) =>
          toast.success(
            res.pushed
              ? `הריפו נוצר ב-Gitea: ${res.repo_url}`
              : `הריפו נוצר אך ה-push נכשל. בדוק את הלוגים של ה-backend.`,
          ),
        onError: (err) =>
          toast.error(
            err instanceof Error ? err.message : "יצירת הריפו נכשלה",
          ),
      },
    );
  }

  return (
    <Button
      variant="outline"
      size="sm"
      onClick={handleClick}
      disabled={createRepo.isPending}
      title="יצירת ריפו ב-Gitea וקישור התיק המקומי אליו"
    >
      {createRepo.isPending ? (
        <Loader2 className="me-1 h-3.5 w-3.5 animate-spin" />
      ) : (
        <Cloud className="me-1 h-3.5 w-3.5" />
      )}
      צור ריפו ב-Gitea
    </Button>
  );
}
