import { OnsiteCoreWindow } from "@mailbiz/onsite-core"; //#region [Window] interface WakecommerceWindow extends OnsiteCoreWindow { Fbits?: FbitsContext; // dataLayer?: WakecommerceDataLayer; client?: WakeClient; checkout_pages?: CheckoutPages; } interface CheckoutPages { checkout?: CheckoutPagesCheckout; login?: CheckoutPagesLogin; account?: CheckoutPagesAccount; } interface CheckoutPagesCheckout { home?: string; complete?: string; confirmation?: string; } interface CheckoutPagesLogin { simple?: string; authenticate?: string; password_recovery?: string; signup?: string; impersonate?: string; access_key?: string; } interface CheckoutPagesAccount { orders?: string; data?: string; password?: string; addresses?: string; checking_account?: string; subscriptions?: string; } interface WakeClient { checkout: WakeClientCheckout; } interface WakeClientCheckout { get(): Promise<{ data: WakeClientCheckoutData; }>; setCheckoutId(checkoutId: string): Promise; } interface WakeClientCheckoutData { checkoutId: string; url: string; products: WakeClientCheckoutProduct[]; shippingFee: number; subtotal: number; total: number; } interface WakeClientCheckoutProduct { name: string; productAttributes: { name: string; value: string; type: number; }[]; listPrice: number; price: number; ajustedPrice: number; productId: number; productVariantId: number; imageUrl: string; quantity: number; customization: unknown | null; } //#endregion //#region [Fbits context] type FbitsContext = { Carrinho?: CartContext; Produto?: ProductPageContext; Checkout?: CheckoutContext; Usuario?: UserContext | null; }; type CartContext = { Id: string; Pedido: { _fechando: boolean; } | null; PedidoId?: number; Eventos?: { events: Array<{ name: string; funcs: Array<{ id: string; }>; }>; }; CEP: any; Usuario: CartUserContext | null; Loja: any; Produtos: ProductContext[]; Metadados: {}; Login: "Novo" | "Autenticado" | "Conhecido" | ""; ValorFrete: number; SubTotal: number; ValorTotal: number; Cupom?: string; Pedidos: Array<{ Id: number; Pagamento: { Parcelamento: number; Valor: number; }; }> | null; Frete: { Nome: string; Prazo: number; Valor: number; } | null; DataAlteracao: string; Origem: any; QuantidadeMinimaProdutos: { Ativo: boolean; Mensagem: string; QuantidadeMinima: number; } | null; ValorMinimoPedido: { ValorMinimo: number; Mensagem: string; } | null; }; interface CartUserContext { Id: number; Nome: string; Email: string; CPF: string; CNPJ: string; LimiteCredito: number; LimiteCreditoSaldo: number; PossuiPrimeiraCompra: boolean; EnderecoEntrega: { Id: number; Rua: string; Numero: string; Complemento: string; Bairro: string; CEP: number; Cidade: string; Estado: string; }; Enderecos: Array<{ Id: number; Rua: string; Numero: string; Complemento: string; Bairro: string; CEP: number; Cidade: string; Estado: string; }>; CustomerAccessToken: string; } interface ProductPropertiesContext { Nome: string; Valor: string; Tipo: number; } interface ProductContext { ProdutoVarianteId: number; ProdutoId: number; Nome: string; UrlImagem: string; Quantidade: number; PrecoDe: number; PrecoPor: number; Brinde: boolean; PrecoPorComAjustesProduto: number; SKU: string; Categoria: string; CategoriasGoogle: Array; Fabricante: string; PrazoEntrega: { Titulo: string; Descricao: string; SegundoTitulo: string; SegundaDescricao: string; PrazoProduto: number; }; Atributos: ProductPropertiesContext[]; Metadados: {}; Informacoes: Array; Recorrencia: any; Url: string; ParcelamentoQuantidade: number; ParcelamentoValor: number; ParcelamentoJuro: boolean; Valores: Array; Ajustes: Array | null; } interface ProductPageContext { __namespace: boolean; Atributos: { urlAtualizar: string; __class: boolean; }; AviseMe: { urlAviseMe: string; __class: boolean; }; AlertaValor: { urlAlertaValor: string; __class: boolean; }; ProdutoVariante: Record; ProdutoId: number; ParentId: number; Nome: string; PrecoDe: number; PrecoPor: number; Parcelamento: { NumeroParcelas: number; ValorParcela: number; }; Url: string; Descricao: string; FotoPrincipal: string; Sku: string; IsTelevendas: boolean; IsDisponivel: boolean; Estoque: number; AtributosProduto: Array<{ [Atributo: string]: string; }>; Categorias: Array<{ ProdutoCategoriaId: number; ProdutoId: number; CategoriaId: number; Nome: string; }>; CategoriaGoogle: string; Marca: string; } interface ProductPagePropertiesContext { ProdutoId: number; ProdutoVarianteId: number; Nome: string; CubagemAltura: number; CubagemLargura: number; CubagemMetroQuadrado: number; Atributos: Record; } interface CheckoutContext { CustomService: any; Listening: Function; Message: Function; Types: any; _listeners: CheckoutContextListeners[]; } interface CheckoutContextListeners { callback: Function; id: string; type: string; } interface UserContext { IsAuthenticated: boolean; UsuarioId: number; Nome: string; Email: string; EmailHash: string; DataNascimento: string; DataCriacao: string; TipoUsuario: string; PossuiPrimeiraCompra: boolean; Assinante: boolean; LimiteCredito: number; LimiteCreditoSaldo: number; } declare global { interface Window extends WakecommerceWindow { } }