import Cookies from 'js-cookie' import { webBackend } from './http' import { Environment, default as kaliEnvironment, } from '../ui/utils/environment' type CreateLeadParams = { phone: string businessUnit: string isCallMeBack: boolean url: string } function getFormId(isCallMeBack: boolean, productInterest: string) { const prodEnv: Environment = 'production' const formsCallMeBack: Record = { SOLAR: '0e8f7d67-711a-4514-8faf-4ce3089e3a5c', CLOUD: '73c683cb-f8bb-4655-80a9-cf7ea116a2f4', ELECTRICITY: '4c72d236-c1d8-40f3-ac78-6ea23ff36952', } const formsCallMeNow: Record = { SOLAR: 'a335e223-e9d1-48ee-a00d-f31ffde3302b', CLOUD: 'b1a66511-4b2c-4d4a-8067-f37dd820e5db', ELECTRICITY: '8d262849-9918-4305-9cf2-b6a20c79f1d0', } if (kaliEnvironment.env === prodEnv) { return isCallMeBack ? formsCallMeBack[productInterest] : formsCallMeNow[productInterest] } return isCallMeBack ? '80b5ecd0-bfdd-44b9-87fd-39bf9083718c' : 'a86419d7-6a15-4ac2-a11d-5799e42e45a4' } const getUrlParams = (urlStr: string) => { // 1. Split the URL by the first question mark to isolate the query part const queryStringParts = urlStr.split('?') // If there is no '?', there are no parameters to extract if (queryStringParts.length < 2) { return {} } // 2. Take everything after the first '?' // We also split by '#' to ensure we remove any trailing fragment that isn't a parameter const cleanQueryString = queryStringParts[1].split('#')[0] // 3. Initialize URLSearchParams with the cleaned string const searchParams = new URLSearchParams(cleanQueryString) // 4. Convert the iterator to a standard JavaScript object // Note: If keys are duplicated, this method keeps the last value found return Object.fromEntries(searchParams.entries()) } export async function createLead({ phone, businessUnit, isCallMeBack, url, }: CreateLeadParams): Promise { let producto_interes let tracking = isCallMeBack ? 'CMB-' : 'CMN-' switch (businessUnit) { case 'solar': producto_interes = 'SOLAR' tracking += 'solar' break case 'battery': producto_interes = 'CLOUD' tracking += 'bateria' break case 'cloud': case 'cloudAlta': producto_interes = 'CLOUD' tracking += 'cloud' break case 'electricity': producto_interes = 'ELECTRICITY' tracking += 'supply' break default: return Promise.resolve() } const urlParams = getUrlParams(url) const payload = { phone, producto_interes, tracking, hutk: Cookies.get('hubspotutk'), custom_referrer_url: url, hsa_acc: urlParams.hsa_acc || '', hsa_cam: urlParams.hsa_cam || '', hsa_grp: urlParams.hsa_grp || '', hsa_ad: urlParams.hsa_ad || '', hsa_kw: urlParams.hsa_kw || '', hsa_src: urlParams.hsa_src || '', hsa_net: urlParams.hsa_net || '', hsa_ver: urlParams.hsa_ver || '', utm_content: urlParams.utm_content || '', utm_campaign: urlParams.utm_campaign || '', utm_medium: urlParams.utm_medium || '', utm_source: urlParams.utm_source || '', utm_term: urlParams.utm_term || '', consent: { consentToProcess: true, }, form_id: getFormId(isCallMeBack, producto_interes), } await webBackend().post('new-contact', payload) }