import { HttpTypes } from "@medusajs/types";

export type PdfCustomerAddress = {
  first_name?: string | null;
  last_name?: string | null;
  address_1?: string | null;
  postal_code?: string | null;
  city?: string | null;
  country_code?: string | null;
};

function hasMeaningfulAddress(address: PdfCustomerAddress | null | undefined) {
  if (!address) {
    return false;
  }

  return Boolean(
    (address.first_name || "").trim() ||
      (address.last_name || "").trim() ||
      (address.address_1 || "").trim() ||
      (address.postal_code || "").trim() ||
      (address.city || "").trim() ||
      (address.country_code || "").trim(),
  );
}

export function getPreferredCustomerAddress(
  addresses?: HttpTypes.StoreCustomerAddress[] | null,
  fallback?: PdfCustomerAddress | null,
) {
  const normalizedAddresses = Array.isArray(addresses) ? addresses : [];
  const preferred =
    normalizedAddresses.find((address) => Boolean(address.is_default_shipping)) ||
    normalizedAddresses.find((address) => Boolean(address.is_default_billing)) ||
    normalizedAddresses[0] ||
    null;

  if (preferred && hasMeaningfulAddress(preferred)) {
    return preferred;
  }

  if (fallback && hasMeaningfulAddress(fallback)) {
    return fallback;
  }

  return null;
}
