import {
  orderConfigurationsSchema,
  orderSelectionsSchema,
  type OrderConfigurations,
  type CreateOrderRequest,
  type OrderSelections,
} from "./schema";
import { ORDER_TYPE } from "./contract";

export function buildOrderConfigurations(selections: OrderSelections): OrderConfigurations {
  const normalizedSelections = orderSelectionsSchema.parse(selections);

  return orderConfigurationsSchema.parse({
    ...normalizedSelections,
    address: normalizedSelections.address
      ? {
          street: normalizedSelections.address.street ?? null,
          streetLine2: normalizedSelections.address.streetLine2 ?? null,
          city: normalizedSelections.address.city ?? null,
          state: normalizedSelections.address.state ?? null,
          postalCode: normalizedSelections.address.postalCode ?? null,
          country: normalizedSelections.address.country ?? null,
        }
      : undefined,
  });
}

export function createOrderRequest(payload: {
  orderType?: string;
  skus: string[];
  configurations?: OrderSelections | null;
}): CreateOrderRequest {
  const orderType = (payload.orderType ?? ORDER_TYPE.OTHER) as CreateOrderRequest["orderType"];
  const configurations = payload.configurations
    ? buildOrderConfigurations(payload.configurations)
    : undefined;
  return {
    orderType,
    skus: payload.skus,
    ...(configurations ? { configurations } : {}),
  };
}

