import { MetaTrackingData } from '../types';

export function getCookie(name: string): string | null {
  if (typeof document === 'undefined') return null;
  const value = `; ${document.cookie}`;
  const parts = value.split(`; ${name}=`);
  if (parts.length === 2) return parts.pop()?.split(';').shift() || null;
  return null;
}

export function setCookie(name: string, val: string, days = 90): void {
  if (typeof document === 'undefined') return;
  const d = new Date();
  d.setTime(d.getTime() + days * 24 * 60 * 60 * 1000);
  document.cookie = `${name}=${val};path=/;expires=${d.toUTCString()};SameSite=Lax`;
}

export function getUrlParam(param: string): string | null {
  if (typeof window === 'undefined') return null;
  const urlParams = new URLSearchParams(window.location.search);
  return urlParams.get(param);
}

export function getOrGenerateFbc(fbclidOverride?: string | null): string | null {
  const fbclid = fbclidOverride ?? getUrlParam('fbclid');
  if (fbclid) {
    const fbc = `fb.1.${Date.now()}.${fbclid}`;
    setCookie('_fbc', fbc, 90);
    return fbc;
  }
  return getCookie('_fbc');
}

export function getOrGenerateFbp(): string {
  let fbp = getCookie('_fbp');
  if (!fbp) {
    const randomId = Math.floor(Math.random() * 9000000000) + 1000000000;
    fbp = `fb.1.${Date.now()}.${randomId}`;
    setCookie('_fbp', fbp, 90);
  }
  return fbp;
}

export function generateEventId(): string {
  return `lead_${Date.now()}_${Math.random().toString(36).substring(2, 9)}`;
}

export function captureCurrentMetaVariables(overrideParams?: Partial<MetaTrackingData>): MetaTrackingData {
  const fbclid = overrideParams?.fbclid ?? getUrlParam('fbclid');
  const fbc = overrideParams?.fbc ?? getOrGenerateFbc(fbclid);
  const fbp = overrideParams?.fbp ?? getOrGenerateFbp();

  return {
    fbclid,
    fbc,
    fbp,
    utm_source: overrideParams?.utm_source ?? getUrlParam('utm_source'),
    utm_medium: overrideParams?.utm_medium ?? getUrlParam('utm_medium'),
    utm_campaign: overrideParams?.utm_campaign ?? getUrlParam('utm_campaign'),
    utm_content: overrideParams?.utm_content ?? getUrlParam('utm_content'),
    utm_term: overrideParams?.utm_term ?? getUrlParam('utm_term'),
    ad_id: overrideParams?.ad_id ?? getUrlParam('ad_id'),
    campaign_id: overrideParams?.campaign_id ?? getUrlParam('campaign_id'),
    pageUrl: typeof window !== 'undefined' ? window.location.href : '',
    referrer: typeof document !== 'undefined' ? document.referrer : '',
    userAgent: typeof navigator !== 'undefined' ? navigator.userAgent : '',
  };
}
