import { queryOptions } from "@tanstack/react-query"; import { jsonQuery } from "../apiAdapter"; export interface CompanySettingsCustomField { name: string; value: string; showLabel: boolean; } export interface CompanySettingsData { // Company info company_name?: string; street?: string; city?: string; postal_code?: string; country?: string; company_id?: string; vat_id?: string; ico?: string; dic?: string; has_logo?: boolean; has_logo_dark?: boolean; custom_fields?: CompanySettingsCustomField[]; supplier_field_order?: string[]; // System settings require_2fa?: boolean; default_currency?: string; default_vat_rate?: number; available_currencies?: string[]; available_vat_rates?: number[]; break_threshold_hours?: number; break_duration_short?: number; break_duration_long?: number; clock_rounding_minutes?: number; invoice_alert_email?: string; leave_notify_email?: string; smtp_from?: string; smtp_from_name?: string; max_login_attempts?: number; lockout_minutes?: number; max_requests_per_minute?: number; // Numbering quotation_prefix?: string; order_type_code?: string; invoice_type_code?: string; offer_number_pattern?: string; order_number_pattern?: string; invoice_number_pattern?: string; issued_order_number_pattern?: string; issued_order_type_code?: string; project_number_pattern?: string; project_type_code?: string; warehouse_receipt_prefix?: string; warehouse_receipt_number_pattern?: string; warehouse_issue_prefix?: string; warehouse_issue_number_pattern?: string; warehouse_inventory_prefix?: string; warehouse_inventory_number_pattern?: string; // Misc app_version?: string; } export const companySettingsOptions = () => queryOptions({ queryKey: ["company-settings"], queryFn: () => jsonQuery("/api/admin/company-settings"), staleTime: 5 * 60_000, }); export const systemInfoOptions = () => queryOptions({ queryKey: ["settings", "system-info"], queryFn: () => jsonQuery>( "/api/admin/company-settings/system-info", ), }); export const require2FAOptions = () => queryOptions({ queryKey: ["settings", "2fa"], queryFn: () => jsonQuery<{ require_2fa: boolean }>("/api/admin/totp/required"), }); // Per-user 2FA enrollment status (users.totp_enabled) — NOT the company-wide // require_2fa policy above. Mutations that enable/disable 2FA must invalidate // the broad ["totp"] domain key. export const totpStatusOptions = () => queryOptions({ queryKey: ["totp", "status"], queryFn: () => jsonQuery<{ totp_enabled: boolean }>("/api/admin/totp/status"), });