import { Button } from '@/components/ui/primitives/Button';
import { Row } from '@/components/ui/layout/Row';
import {
  AlertDialog,
  AlertDialogAction,
  AlertDialogCancel,
  AlertDialogContent,
  AlertDialogDescription,
  AlertDialogFooter,
  AlertDialogHeader,
  AlertDialogTitle,
  AlertDialogTrigger,
} from '@/components/ui/overlays/AlertDialog';
import { Card } from './VendorDetail.shared';
import type { FormAction, VendorDetailData } from './VendorDetail.types';

interface VendorDetailActionsProps {
  vendor: VendorDetailData;
  loading: string | null;
  showApproveAnyway: boolean;
  onActivate: () => void;
  onApproveAnywayOpen: () => void;
  onFreezeOpen: () => void;
  onUnfreeze: () => void;
  onBanOpen: () => void;
  onMessageOpen: () => void;
  preloadApproveAnyway: () => void;
  preloadEditActionPanel: () => void;
  t: (key: string) => string;
  tAdmin: (key: string) => string;
  tCommon: (key: string) => string;
}

function preload(onPreload: () => void) {
  onPreload();
}

export function VendorDetailActions({
  vendor,
  loading,
  showApproveAnyway,
  onActivate,
  onApproveAnywayOpen,
  onFreezeOpen,
  onUnfreeze,
  onBanOpen,
  onMessageOpen,
  preloadApproveAnyway,
  preloadEditActionPanel,
  t,
  tAdmin,
  tCommon,
}: VendorDetailActionsProps) {
  return (
    <Card>
      <Row gap="2" wrap>
        {showApproveAnyway && (
          <Button
            variant="primary"
            size="sm"
            disabled={loading !== null}
            onClick={onApproveAnywayOpen}
            onMouseEnter={() => preload(preloadApproveAnyway)}
            onFocus={() => preload(preloadApproveAnyway)}
          >
            {tAdmin('approve_anyway_button')}
          </Button>
        )}

        {((vendor.accountState === 'PENDING_FIRST_APPROVAL' && !vendor.flagReason) ||
          vendor.accountState === 'PENDING_PROCESSOR') && (
          <AlertDialog>
            <AlertDialogTrigger asChild>
              <Button variant="secondary" size="sm" disabled={loading !== null}>
                {vendor.accountState === 'PENDING_PROCESSOR'
                  ? tAdmin('force_activate_button')
                  : tAdmin('activate')}
              </Button>
            </AlertDialogTrigger>
            <AlertDialogContent>
              <AlertDialogHeader>
                <AlertDialogTitle>{t('activate_confirm_title')}</AlertDialogTitle>
                <AlertDialogDescription>{t('activate_confirm_desc')}</AlertDialogDescription>
              </AlertDialogHeader>
              {vendor.accountState === 'PENDING_PROCESSOR' && !vendor.stripeChargesEnabled && (
                <p className="text-semantic-warning-700 bg-semantic-warning-50 rounded-md px-3 py-2 text-sm">
                  {tAdmin('activate_no_stripe_warning')}
                </p>
              )}
              <AlertDialogFooter>
                <AlertDialogAction onClick={onActivate}>
                  {vendor.accountState === 'PENDING_PROCESSOR'
                    ? tAdmin('force_activate_button')
                    : tAdmin('activate')}
                </AlertDialogAction>
                <AlertDialogCancel>{tCommon('cancel')}</AlertDialogCancel>
              </AlertDialogFooter>
            </AlertDialogContent>
          </AlertDialog>
        )}

        {vendor.accountState !== 'FROZEN' ? (
          <Button
            variant="secondary"
            size="sm"
            disabled={loading !== null || vendor.accountState === 'BANNED'}
            onClick={onFreezeOpen}
            onMouseEnter={() => preload(preloadEditActionPanel)}
            onFocus={() => preload(preloadEditActionPanel)}
          >
            {tAdmin('freeze')}
          </Button>
        ) : (
          <AlertDialog>
            <AlertDialogTrigger asChild>
              <Button variant="secondary" size="sm" disabled={loading !== null}>
                {tAdmin('unfreeze')}
              </Button>
            </AlertDialogTrigger>
            <AlertDialogContent>
              <AlertDialogHeader>
                <AlertDialogTitle>{t('unfreeze_confirm_title')}</AlertDialogTitle>
                <AlertDialogDescription>{t('unfreeze_confirm_desc')}</AlertDialogDescription>
              </AlertDialogHeader>
              <AlertDialogFooter>
                <AlertDialogAction onClick={onUnfreeze}>{tAdmin('unfreeze')}</AlertDialogAction>
                <AlertDialogCancel>{tCommon('cancel')}</AlertDialogCancel>
              </AlertDialogFooter>
            </AlertDialogContent>
          </AlertDialog>
        )}

        <Button
          variant="danger"
          size="sm"
          disabled={loading !== null || vendor.accountState === 'BANNED'}
          onClick={onBanOpen}
          onMouseEnter={() => preload(preloadEditActionPanel)}
          onFocus={() => preload(preloadEditActionPanel)}
        >
          {tAdmin('ban')}
        </Button>

        <Button
          variant="ghost"
          size="sm"
          disabled={loading === ('send_message' as FormAction)}
          onClick={onMessageOpen}
          onMouseEnter={() => preload(preloadEditActionPanel)}
          onFocus={() => preload(preloadEditActionPanel)}
        >
          {tAdmin('send_message')}
        </Button>
      </Row>
    </Card>
  );
}
