'use client';

import { useRouter } from 'next/navigation';
import { FoxButton } from '@fox/core/components/fox-button';
import { FoxButtonGroup } from '@fox/core/components/fox-button-group';
import { useBlockingAction } from '@/app/_hooks/use-blocking-action';
import { useFeedback } from '@/app/_hooks/use-feedback';
import type { MerchantDetailSummary } from '@/lib/domain/merchant-detail';
import { merchantDetailPath } from '@/lib/domain/merchant-detail-query';
import {
  deleteMerchantDetailAction,
  updateMerchantDetailVisibilityAction,
} from '../_actions';

interface MerchantDetailRowActionsProps {
  row: MerchantDetailSummary;
}

/**
 * 기획 BO-MAL-001 관리 열 — [수정] [비활성|노출] [삭제]. 목록에는 상세가 있는 가맹점만 서므로
 * [수정]은 수정 화면으로 간다.
 */
export function MerchantDetailRowActions({ row }: MerchantDetailRowActionsProps) {
  const router = useRouter();
  const { showAlert, hideAlert, showToast } = useFeedback();
  const [isBusy, startAction] = useBlockingAction();

  function toggleVisibility() {
    const next = row.isVisible === false;
    startAction(async () => {
      const result = await updateMerchantDetailVisibilityAction(row.id, next);
      showToast(
        result.status === 'error'
          ? { variant: 'danger', message: result.message }
          : { variant: 'success', message: next ? '노출로 바꿨습니다.' : '비활성으로 바꿨습니다.' }
      );
    });
  }

  function runDelete() {
    hideAlert();
    startAction(async () => {
      const result = await deleteMerchantDetailAction(row.id);
      showToast(
        result.status === 'error'
          ? { variant: 'danger', message: result.message }
          : { variant: 'success', message: '삭제했습니다.' }
      );
    });
  }

  function confirmDelete() {
    showAlert({
      variant: 'danger',
      title: '가맹몰 상세를 삭제하시겠습니까?',
      message: `"${row.name}"의 상세 정보를 삭제합니다. 삭제 후에는 되돌릴 수 없습니다.`,
      actions: (
        <FoxButtonGroup size="md">
          <FoxButton type="default" size="md" label="취소" onAction={hideAlert} />
          <FoxButton type="primary" size="md" label="삭제" onAction={runDelete} />
        </FoxButtonGroup>
      ),
    });
  }

  return (
    <FoxButtonGroup size="sm" align="center">
      <FoxButton
        type="default"
        size="sm"
        label="수정"
        onAction={() => router.push(merchantDetailPath(row.id))}
      />
      <FoxButton
        type="default"
        size="sm"
        label={row.isVisible === false ? '노출' : '비활성'}
        disabled={isBusy}
        onAction={toggleVisibility}
      />
      <FoxButton
        type="default"
        size="sm"
        label="삭제"
        disabled={isBusy}
        onAction={confirmDelete}
      />
    </FoxButtonGroup>
  );
}
