import { useQueryClient } from '@tanstack/react-query'; import { useGetSettings, updateSettings, getGetSettingsQueryKey } from '@/api/generated/company-settings/company-settings'; import { LABEL_DEFAULTS, DEFAULT_VAT_MODE, type CompanySettings, type VatMode } from './catalog'; // 회사 커스터마이징 설정 조회 + 저장. // 조회는 전 유저(브랜딩/라벨 렌더용), 저장은 백엔드가 OWNER 로 게이트한다. export function useCompanySettings() { const queryClient = useQueryClient(); const query = useGetSettings({ query: { staleTime: 5 * 60 * 1000 } }); const settings: CompanySettings = (query.data?.settings as CompanySettings) ?? {}; const save = async (next: CompanySettings) => { const res = await updateSettings({ settings: next as Record }); if (res.result?.success === false) throw new Error(res.result.desc || '설정 저장에 실패했습니다.'); await queryClient.invalidateQueries({ queryKey: getGetSettingsQueryKey() }); }; return { settings, isLoading: query.isLoading, save }; } // 용어 라벨 헬퍼. label('item.price') → 회사 설정 용어, 없으면 카탈로그 기본값. export function useLabels() { const { settings } = useCompanySettings(); const overrides = settings.labels ?? {}; return (key: string): string => overrides[key] || LABEL_DEFAULTS[key] || key; } // 숨김필드 헬퍼. isHidden('made_in') → 이 회사에서 감출 필드인지. // 부가세 전체 통일(features.vat_mode) 회사는 상품별 VAT 입력이 무의미하므로 vat_yn 을 숨김으로 친다 — // 상품 폼·엑셀 양식·데이터 내보내기가 이 헬퍼 하나를 읽어 함께 사라진다. export function useHiddenFields() { const { settings } = useCompanySettings(); const hidden = settings.hidden_fields ?? []; const vatUnified = settings.features?.vat_mode === 'unified_excluded'; return (key: string): boolean => hidden.includes(key) || (vatUnified && key === 'vat_yn'); } // 부가세 관리 모드 헬퍼. 미설정이면 상품별(per_item). export function useVatMode(): VatMode { const { settings } = useCompanySettings(); return settings.features?.vat_mode ?? DEFAULT_VAT_MODE; } // 브랜딩 헬퍼. 서비스명·로고 — 미설정 시 기본 브랜드(NegoData). 색은 회사별 커스텀 없이 솔루션 고정. export function useBranding() { const { settings } = useCompanySettings(); return { serviceName: settings.branding?.service_name || 'NegoData', logoUrl: settings.branding?.logo_url || null, }; }