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<CompanySettingsData>("/api/admin/company-settings"),
    staleTime: 5 * 60_000,
  });

export const systemInfoOptions = () =>
  queryOptions({
    queryKey: ["settings", "system-info"],
    queryFn: () =>
      jsonQuery<Record<string, unknown>>(
        "/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"),
  });
