import type { MedusaCustomerAddressCreateInput, MedusaCustomerAddressUpdateInput } from "../customers/medusa-service";
import type { StorefrontAddressValidationIssue, StorefrontCartAddressAdapter, StorefrontCustomerAddressAdapter } from "../shared/address";
export type CheckoutAddressInput = {
    firstName?: string | null;
    lastName?: string | null;
    street?: string | null;
    street2?: string | null;
    city?: string | null;
    postalCode?: string | null;
    country?: string | null;
    province?: string | null;
    company?: string | null;
    phone?: string | null;
    isDefaultShipping?: boolean;
    isDefaultBilling?: boolean;
    metadata?: Record<string, unknown>;
};
type CheckoutAddressStringField = {
    [K in keyof CheckoutAddressInput]-?: NonNullable<CheckoutAddressInput[K]> extends string ? K : never;
}[keyof CheckoutAddressInput];
export type NormalizedCheckoutAddress<TAddress extends CheckoutAddressInput = CheckoutAddressInput> = Omit<TAddress, CheckoutAddressStringField> & {
    [K in CheckoutAddressStringField]?: string;
};
export type CheckoutAddressData<TAddress extends CheckoutAddressInput = CheckoutAddressInput> = {
    shipping: TAddress;
    billing?: TAddress;
    useSameAddress?: true;
    email?: string | null;
} | {
    shipping: TAddress;
    billing: TAddress;
    useSameAddress: false;
    email?: string | null;
};
export type CheckoutAddressValidationOptions = {
    requireEmail?: boolean;
    shippingRequiredFields?: readonly CheckoutAddressStringField[];
    billingRequiredFields?: readonly CheckoutAddressStringField[];
};
export type CheckoutAddressValidationIssue = StorefrontAddressValidationIssue;
export type MedusaCartAddressPayload = {
    first_name?: string;
    last_name?: string;
    address_1?: string;
    address_2?: string;
    city?: string;
    postal_code?: string;
    country_code?: string;
    province?: string;
    company?: string;
    phone?: string;
};
export type CheckoutCustomerAddressUpdateInput<TAddress extends CheckoutAddressInput = CheckoutAddressInput> = TAddress & {
    addressId?: string;
};
export type MedusaAddressLike = {
    first_name?: string | null;
    last_name?: string | null;
    address_1?: string | null;
    address_2?: string | null;
    city?: string | null;
    postal_code?: string | null;
    country_code?: string | null;
    province?: string | null;
    company?: string | null;
    phone?: string | null;
    is_default_shipping?: boolean | null;
    is_default_billing?: boolean | null;
    metadata?: Record<string, unknown> | null;
};
export type BuildCheckoutCartAddressInputOptions = {
    defaultCountryCode?: string;
    countryCodeTransform?: (countryCode: string) => string;
};
export type CheckoutCartAddressInput = {
    email?: string;
    shippingAddress: MedusaCartAddressPayload;
    billingAddress: MedusaCartAddressPayload;
    useSameAddress: boolean;
};
export type CheckoutCartAddressAdapterOptions = BuildCheckoutCartAddressInputOptions & Pick<CheckoutAddressValidationOptions, "shippingRequiredFields" | "billingRequiredFields">;
export type CheckoutCustomerAddressAdapterOptions = BuildCheckoutCartAddressInputOptions & {
    requiredFields?: readonly CheckoutAddressStringField[];
};
export declare const defaultCheckoutAddressRequiredFields: readonly CheckoutAddressStringField[];
export declare const getCheckoutAddressValidationIssues: <TAddress extends CheckoutAddressInput>(data: CheckoutAddressData<TAddress>, options?: CheckoutAddressValidationOptions) => CheckoutAddressValidationIssue[];
export declare const mapCheckoutAddressToMedusaCartAddress: <TAddress extends CheckoutAddressInput>(address: TAddress, options?: BuildCheckoutCartAddressInputOptions) => MedusaCartAddressPayload;
export declare const mapMedusaAddressToCheckoutAddress: <TAddress extends CheckoutAddressInput = CheckoutAddressInput>(address?: MedusaAddressLike | null) => NormalizedCheckoutAddress<TAddress>;
export declare const createCheckoutCartAddressAdapter: <TAddress extends CheckoutAddressInput = CheckoutAddressInput>(options?: CheckoutCartAddressAdapterOptions) => StorefrontCartAddressAdapter<TAddress, MedusaCartAddressPayload>;
export declare const createCheckoutCustomerAddressAdapter: <TAddress extends CheckoutAddressInput = CheckoutAddressInput, TUpdateInput extends CheckoutCustomerAddressUpdateInput<TAddress> = CheckoutCustomerAddressUpdateInput<TAddress>>(options?: CheckoutCustomerAddressAdapterOptions) => StorefrontCustomerAddressAdapter<TAddress, MedusaCustomerAddressCreateInput, TUpdateInput, MedusaCustomerAddressUpdateInput>;
export declare const buildCheckoutCartAddressInput: <TAddress extends CheckoutAddressInput>(data: CheckoutAddressData<TAddress>, options?: BuildCheckoutCartAddressInputOptions) => CheckoutCartAddressInput;
export {};
//# sourceMappingURL=address.d.ts.map