/* 옥션 화면 공용 소도구 — 토스트(성공/오류) + 오류 메시지 추출. */
import { useCallback, useRef, useState } from 'react';
import { IconCheckCircle } from '../../components/ui/icons';
import { ApiRequestError } from '../../api/client';

export function useToast() {
  const [msg, setMsg] = useState<string | null>(null);
  const timer = useRef<number | null>(null);
  const show = useCallback((text: string) => {
    setMsg(text);
    if (timer.current) window.clearTimeout(timer.current);
    timer.current = window.setTimeout(() => setMsg(null), 2600);
  }, []);
  const node = msg ? (
    <div className="kx-auc__toast" role="status">
      <IconCheckCircle size={18} />
      {msg}
    </div>
  ) : null;
  return { show, node };
}

/** 서버 오류 봉투 → 사용자 메시지. 봉인/등록업체/마감 코드는 도메인 문구로 치환. */
export function errMessage(e: unknown): string {
  if (e instanceof ApiRequestError) {
    switch (e.code) {
      case 'NOT_REGISTERED_COMPANY':
        return '킨텍스 등록업체만 응찰할 수 있습니다.';
      case 'FORBIDDEN':
        return '이 작업에 대한 권한이 없습니다.';
      case 'CONFLICT':
        return '마감되었거나 현재 상태와 충돌하여 처리할 수 없습니다.';
      case 'VALIDATION':
        return e.message || '입력값을 확인해 주세요.';
      default:
        return e.message || '요청을 처리하지 못했습니다.';
    }
  }
  return '요청을 처리하지 못했습니다.';
}
