"use client";

import { useTransition } from "react";
import { useRouter } from "next/navigation";
import Link from "next/link";
import { Loader2 } from "lucide-react";
import { Button } from "@/components/ui/button";
import { useToast } from "@/hooks/use-toast";
import { handleAdvancePurchasePostingStatus, handleCancelPurchaseOrder, handleRestorePurchaseOrder } from "@/lib/actions";

type Props = {
  orderId: string;
  canEdit: boolean;
  canCancel: boolean;
  canRestore?: boolean;
  isShipmentDoc?: boolean;
  postingStatus?: 'draft' | 'saved' | 'posted';
  canAdvancePosting?: boolean;
  cancelBlockedReason?: string;
  t?: any;
  tGlobal?: any;
};

export default function PurchaseHistoryActions({ orderId, canEdit, canCancel, canRestore = false, isShipmentDoc = false, postingStatus = 'posted', canAdvancePosting = false, cancelBlockedReason, t, tGlobal }: Props) {
  const { toast } = useToast();
  const router = useRouter();
  const [isPending, startTransition] = useTransition();

  const handleCancel = () => {
    if (!canCancel || isPending) return;
    const confirmed = typeof window === 'undefined'
      ? true
      : window.confirm(
        isShipmentDoc
          ? (t?.cancelShipmentConfirmMessage || 'هل أنت متأكد من إلغاء الإرسالية؟')
          : (t?.cancelConfirmMessage || "هل أنت متأكد من إلغاء أمر الشراء؟")
      );
    if (!confirmed) return;

    startTransition(async () => {
      const result = await handleCancelPurchaseOrder(orderId);
      if (result?.success) {
        toast({
          title: t?.cancelSuccessTitle || "تم الإلغاء",
          description: isShipmentDoc
            ? (result?.alreadyCancelled
              ? (t?.cancelShipmentAlreadyDoneDescription || 'الإرسالية ملغاة مسبقًا.')
              : (t?.cancelShipmentSuccessDescription || 'تم إلغاء الإرسالية بنجاح.'))
            : (result?.alreadyCancelled
              ? (t?.cancelAlreadyDoneDescription || 'الفاتورة ملغاة مسبقًا.')
              : (t?.cancelSuccessDescription || "تم إلغاء أمر الشراء بنجاح.")),
        });
        router.refresh();
        return;
      }

      if (result?.error === 'ORDER_NOT_FOUND' || result?.error === 'ORDER_NOT_ACTIVE') {
        toast({
          title: t?.cancelSuccessTitle || 'تم الإلغاء',
          description: t?.cancelAlreadyDoneDescription || 'الفاتورة ملغاة مسبقًا أو لم تعد متاحة.',
        });
        router.refresh();
        return;
      }

      const knownErrors: Record<string, string> = {
        ORDER_HAS_TRANSFER_DOCS: t?.cancelBlockedTransferDocs || "لا يمكن الإلغاء لوجود إرساليات داخلية مرتبطة بهذه الفاتورة.",
        ORDER_HAS_SUPPLIER_PAYMENTS: t?.cancelBlockedSupplierPayments || "لا يمكن الإلغاء لوجود سندات دفع مرتبطة بهذه الفاتورة.",
        ORDER_HAS_PURCHASE_RETURNS: t?.cancelBlockedPurchaseReturns || "لا يمكن الإلغاء لوجود مردودات مشتريات مرتبطة بهذه الفاتورة.",
        ORDER_HAS_OTHER_MOVEMENTS: t?.cancelBlockedOtherMovements || "لا يمكن الإلغاء لوجود حركات أخرى مرتبطة بهذه الفاتورة.",
        PERIOD_LOCKED: t?.periodLockedDesc || "لا يمكن الإلغاء داخل فترة مقفلة.",
        INVENTORY_LOCKED: t?.inventoryLockedDesc || "لا يمكن الإلغاء بسبب إقفال الجرد.",
        INSUFFICIENT_STOCK_FOR_REVERSE: t?.cancelBlockedInsufficientReverseStock || "لا يمكن إلغاء الفاتورة لأن الكمية لم تعد متوفرة بالكامل لعكس حركة المخزون.",
        INVENTORY_REVERSE_FAILED: t?.cancelBlockedInsufficientReverseStock || "تعذر عكس حركة المخزون لهذه الفاتورة.",
      };

      toast({
        title: tGlobal?.error || "خطأ",
        description: knownErrors[result?.error || ""] || result?.error || t?.saveOrderError || "فشل تنفيذ العملية",
        variant: "destructive",
      });
    });
  };

  const handleRestore = () => {
    if (!canRestore || isPending) return;

    startTransition(async () => {
      const result = await handleRestorePurchaseOrder(orderId);
      if (result?.success && result?.orderId) {
        toast({
          title: t?.restoreSuccessTitle || "تم الاسترجاع",
          description: (t?.restoreSuccessDescription || "تم إنشاء نسخة جديدة من الفاتورة: {orderNumber}")
            .replace('{orderNumber}', result.orderNumber || ''),
        });
        router.push(`/admin/purchases/edit/${result.orderId}`);
        return;
      }

      const knownErrors: Record<string, string> = {
        ORDER_NOT_FOUND: t?.orderNotFound ?? "الفاتورة غير موجودة.",
        ORDER_NOT_CANCELLED: t?.restoreOnlyCancelledHint ?? "الاسترجاع متاح للفواتير الملغاة فقط.",
      };

      toast({
        title: tGlobal?.error || "خطأ",
        description: knownErrors[result?.error || ""] || result?.error || t?.saveOrderError || "فشل تنفيذ العملية",
        variant: "destructive",
      });
    });
  };

  const handleAdvancePosting = () => {
    if (!canAdvancePosting || isPending) return;

    startTransition(async () => {
      const result = await handleAdvancePurchasePostingStatus(orderId);
      if (result?.success) {
        toast({
          title: t?.postingAdvanceSuccessTitle || 'تم تحديث حالة الترحيل',
          description: result?.postingStatus === 'posted'
            ? (t?.postingPostedLabel || 'مرحل')
            : (t?.postingSavedLabel || 'محفوظ'),
        });
        router.refresh();
        return;
      }

      const knownErrors: Record<string, string> = {
        ORDER_NOT_FOUND: t?.orderNotFound ?? 'الفاتورة غير موجودة.',
        ORDER_NOT_ACTIVE: t?.cancelBlockedNotActive ?? 'الإجراء متاح للفواتير النشطة فقط.',
        ALREADY_POSTED: t?.postedOrderEditLockedDesc ?? 'الفاتورة مرحلة مسبقًا.',
        ALREADY_SAVED_SHIPMENT: t?.shipmentAlreadySavedPostingHint ?? 'الإرسالية لا تنتقل إلى مرحلة مرحل. حالة محفوظ هي الحالة النهائية لها.',
      };

      toast({
        title: tGlobal?.error || 'خطأ',
        description: knownErrors[result?.error || ''] || result?.error || t?.saveOrderError || 'فشل تنفيذ العملية',
        variant: 'destructive',
      });
    });
  };

  return (
    <div className="flex items-center gap-2">
      {canEdit ? (
        <Button asChild variant="outline" size="sm">
          <Link href={`/admin/purchases/edit/${orderId}`}>
            {t?.edit ?? "تعديل"}
          </Link>
        </Button>
      ) : (
        <Button variant="outline" size="sm" disabled title={t?.postedOrderEditLockedDesc ?? "الفاتورة المرحلة لا تقبل التعديل المباشر"}>
          {t?.edit ?? "تعديل"}
        </Button>
      )}

      <Button
        type="button"
        variant="destructive"
        size="sm"
        disabled={!canCancel || isPending}
        title={!canCancel ? cancelBlockedReason || (t?.cancelBlockedGeneric || "الإلغاء غير متاح") : undefined}
        onClick={handleCancel}
      >
        {isPending
          ? <Loader2 className="h-4 w-4 animate-spin" />
          : (isShipmentDoc ? (t?.cancelShipment ?? 'إلغاء الإرسالية') : (t?.cancelOrder ?? "إلغاء"))}
      </Button>

      {canAdvancePosting && (
        <Button
          type="button"
          variant="default"
          size="sm"
          disabled={isPending}
          onClick={handleAdvancePosting}
          title={postingStatus === 'draft'
            ? (t?.advancePostingFromDraftHint ?? 'نقل الفاتورة من مسودة إلى محفوظ')
            : (t?.advancePostingFromSavedHint ?? 'ترحيل الفاتورة من محفوظ إلى مرحل')}
        >
          {isPending
            ? <Loader2 className="h-4 w-4 animate-spin" />
            : (postingStatus === 'draft'
              ? (t?.postingSavedLabel || 'حفظ')
              : (t?.postingPostedLabel || 'ترحيل'))}
        </Button>
      )}

      {canRestore && (
        <Button
          type="button"
          variant="secondary"
          size="sm"
          disabled={isPending}
          onClick={handleRestore}
        >
          {isPending ? <Loader2 className="h-4 w-4 animate-spin" /> : (t?.restoreOrder ?? "استرجاع")}
        </Button>
      )}
    </div>
  );
}
