/**
 * AdvancedBilling
 *
 * This file was automatically generated for Maxio by APIMATIC v3.0 ( https://www.apimatic.io ).
 */

import {
  array,
  bigint,
  expandoObject,
  lazy,
  nullable,
  number,
  optional,
  Schema,
  string,
} from '../schema.js';
import { OfferDiscount, offerDiscountSchema } from './offerDiscount.js';
import { OfferItem, offerItemSchema } from './offerItem.js';
import { OfferSignupPage, offerSignupPageSchema } from './offerSignupPage.js';

export interface Offer {
  id?: number;
  siteId?: number;
  productFamilyId?: number;
  productId?: number;
  productPricePointId?: number;
  productRevisableNumber?: number;
  name?: string;
  handle?: string;
  description?: string | null;
  createdAt?: string;
  updatedAt?: string;
  archivedAt?: string | null;
  offerItems?: OfferItem[];
  offerDiscounts?: OfferDiscount[];
  productFamilyName?: string;
  productName?: string;
  productPricePointName?: string;
  productPriceInCents?: bigint;
  offerSignupPages?: OfferSignupPage[];
  [key: string]: unknown;
}

export const offerSchema: Schema<Offer> = lazy(() =>
  expandoObject({
    id: ['id', optional(number())],
    siteId: ['site_id', optional(number())],
    productFamilyId: ['product_family_id', optional(number())],
    productId: ['product_id', optional(number())],
    productPricePointId: ['product_price_point_id', optional(number())],
    productRevisableNumber: ['product_revisable_number', optional(number())],
    name: ['name', optional(string())],
    handle: ['handle', optional(string())],
    description: ['description', optional(nullable(string()))],
    createdAt: ['created_at', optional(string())],
    updatedAt: ['updated_at', optional(string())],
    archivedAt: ['archived_at', optional(nullable(string()))],
    offerItems: ['offer_items', optional(array(offerItemSchema))],
    offerDiscounts: ['offer_discounts', optional(array(offerDiscountSchema))],
    productFamilyName: ['product_family_name', optional(string())],
    productName: ['product_name', optional(string())],
    productPricePointName: ['product_price_point_name', optional(string())],
    productPriceInCents: ['product_price_in_cents', optional(bigint())],
    offerSignupPages: [
      'offer_signup_pages',
      optional(array(offerSignupPageSchema)),
    ],
  })
);
