'use client';

/**
 * AdminOverridePanel
 *
 * Admin-only action panel for force-refunding or closing a return without
 * refund. Calls POST /api/admin/returns/{id}/override.
 *
 * Disabled when the return is already in a terminal resolved state (refunded).
 */

import { useState } from 'react';
import { Button } from '@/components/ui/primitives/Button';
import { Textarea } from '@/components/ui/primitives/Textarea';
import { useT } from '@/lib/i18n/react';
import { getCsrfToken } from '@/lib/csrf';
import { captureCaught } from '@/lib/observability';
import {
  AlertDialog,
  AlertDialogAction,
  AlertDialogCancel,
  AlertDialogContent,
  AlertDialogDescription,
  AlertDialogFooter,
  AlertDialogHeader,
  AlertDialogTitle,
} from '@/components/ui/overlays/AlertDialog';
import {
  Tooltip,
  TooltipContent,
  TooltipTrigger,
  TooltipProvider,
} from '@/components/ui/overlays/Tooltip';

export interface AdminOverridePanelProps {
  returnId: string;
  status: string;
}

export function AdminOverridePanel({ returnId, status }: AdminOverridePanelProps) {
  const t = useT('returns');
  const tCommon = useT('common');
  const [reason, setReason] = useState('');
  const [busy, setBusy] = useState(false);
  const [error, setError] = useState<string | null>(null);
  const [pendingAction, setPendingAction] = useState<'force_refund' | 'close' | null>(null);

  const isResolved = status === 'refunded';
  const reasonTooShort = reason.trim().length < 3;

  const send = async (action: 'force_refund' | 'close') => {
    if (reasonTooShort) {
      setError(t('adminOverrideMinReason'));
      return;
    }
    setBusy(true);
    setError(null);
    try {
      const headers: Record<string, string> = { 'content-type': 'application/json' };
      const csrf = getCsrfToken();
      if (csrf) headers['x-csrf-token'] = csrf;
      const res = await fetch(`/api/admin/returns/${returnId}/override`, {
        method: 'POST',
        headers,
        body: JSON.stringify({ action, reason: reason.trim() }),
        credentials: 'same-origin',
      });
      if (!res.ok) {
        const j = await res.json().catch((err) => {
          captureCaught(err, { scope: 'features.returns.AdminOverridePanel.parseError' });
          return {};
        });
        throw new Error((j as { error?: string }).error ?? `HTTP ${res.status}`);
      }
      location.reload();
    } catch (e) {
      setError(e instanceof Error ? e.message : t('adminActionFailed'));
    } finally {
      setBusy(false);
      setPendingAction(null);
    }
  };

  if (isResolved) {
    return (
      <section
        aria-labelledby="admin-override-heading"
        className="border-border-default bg-surface-raised flex flex-col gap-4 rounded-lg border p-4"
      >
        <h3 id="admin-override-heading" className="text-text-primary text-sm font-semibold">
          {t('adminOverrideTitle')}
        </h3>
        <p className="text-text-secondary text-sm">{t('adminOverrideResolvedNotice')}</p>
      </section>
    );
  }

  return (
    <TooltipProvider>
      <section
        aria-labelledby="admin-override-heading"
        className="border-border-default bg-surface-raised flex flex-col gap-4 rounded-lg border p-4"
      >
        <div>
          <h3 id="admin-override-heading" className="text-text-primary text-sm font-semibold">
            {t('adminOverrideTitle')}
          </h3>
          <p className="text-text-secondary mt-1 text-xs">{t('adminOverrideDesc')}</p>
        </div>

        <div className="flex flex-col gap-1.5">
          <label
            htmlFor="admin-override-reason"
            className="text-text-secondary text-xs font-medium"
          >
            {t('adminOverrideReasonLabel')}
          </label>
          <Textarea
            id="admin-override-reason"
            rows={3}
            value={reason}
            onChange={(e) => setReason(e.target.value)}
            placeholder={t('adminOverrideReasonPlaceholder')}
            disabled={busy}
            aria-describedby={
              error ? 'admin-override-error' : reasonTooShort ? 'admin-override-hint' : undefined
            }
            invalid={!!error}
            className="text-sm"
          />
          {reasonTooShort && !error && (
            <p id="admin-override-hint" className="text-text-muted text-xs">
              {t('adminOverrideMinReason')}
            </p>
          )}
        </div>

        {error && (
          <p id="admin-override-error" role="alert" className="text-danger-600 text-xs">
            {error}
          </p>
        )}

        <div className="flex flex-wrap gap-2">
          <Tooltip>
            <TooltipTrigger asChild>
              <Button
                variant="primary"
                size="sm"
                onClick={() => setPendingAction('force_refund')}
                disabled={busy || reasonTooShort}
                aria-busy={busy}
              >
                {t('adminForceRefund')}
              </Button>
            </TooltipTrigger>
            <TooltipContent className="max-w-xs text-xs">
              {t('adminForceRefundTooltip')}
            </TooltipContent>
          </Tooltip>
          <Tooltip>
            <TooltipTrigger asChild>
              <Button
                variant="danger"
                size="sm"
                onClick={() => setPendingAction('close')}
                disabled={busy || reasonTooShort}
                aria-busy={busy}
              >
                {t('adminCloseWithoutRefund')}
              </Button>
            </TooltipTrigger>
            <TooltipContent className="max-w-xs text-xs">
              {t('adminCloseWithoutRefundTooltip')}
            </TooltipContent>
          </Tooltip>
        </div>

        <AlertDialog
          open={pendingAction !== null}
          onOpenChange={(open) => {
            if (!open) setPendingAction(null);
          }}
        >
          <AlertDialogContent>
            <AlertDialogHeader>
              <AlertDialogTitle>
                {pendingAction === 'force_refund'
                  ? t('adminForceRefund')
                  : t('adminCloseWithoutRefund')}
              </AlertDialogTitle>
              <AlertDialogDescription>
                {pendingAction === 'force_refund'
                  ? t('adminForceRefundConfirm')
                  : t('adminCloseWithoutRefundConfirm')}
              </AlertDialogDescription>
            </AlertDialogHeader>
            <AlertDialogFooter>
              <AlertDialogCancel disabled={busy}>{tCommon('cancel')}</AlertDialogCancel>
              <AlertDialogAction
                disabled={busy}
                onClick={() => {
                  if (pendingAction) void send(pendingAction);
                }}
              >
                {tCommon('confirm')}
              </AlertDialogAction>
            </AlertDialogFooter>
          </AlertDialogContent>
        </AlertDialog>
      </section>
    </TooltipProvider>
  );
}
