
import { Toaster } from "@/components/ui/toaster";
import { Toaster as Sonner } from "@/components/ui/sonner";
import { TooltipProvider } from "@/components/ui/tooltip";
import { QueryClient, QueryClientProvider } from "@tanstack/react-query";
import { BrowserRouter, Routes, Route, useLocation } from "react-router-dom";
import { HelmetProvider } from "react-helmet-async";
import { useEffect } from "react";
import { CookieConsentProvider, useCookieConsent } from "@/contexts/CookieConsentContext";
import CookieConsentBanner from "@/components/CookieConsentBanner";
import CookiePreferencesModal from "@/components/CookiePreferencesModal";
import Index from "./pages/Index";
import CaseStudies from "./pages/CaseStudies";
import AboutUs from "./pages/AboutUs";
import PrivacyPolicy from "./pages/PrivacyPolicy";
import SiteNotice from "./pages/SiteNotice";
import NotFound from "./pages/NotFound";
import News from "./pages/News";
import V2gDayEvent from "./pages/news/V2gDayEvent";
import AffinityEvAcquisition from "./pages/news/AffinityEvAcquisition";
import JasonCranswickAdvisor from "./pages/news/JasonCranswickAdvisor";
import MobilityHousePartnership from "./pages/news/MobilityHousePartnership";
import ChargePointPartnership from "./pages/news/ChargePointPartnership";
import KaluzaPartnership from "./pages/news/KaluzaPartnership";
import EvEnergyPartnership from "./pages/news/EvEnergyPartnership";
import OvoEnergyPartnership from "./pages/news/OvoEnergyPartnership";
import ScottishPowerPartnership from "./pages/news/ScottishPowerPartnership";
import HypervoltPartnership from "./pages/news/HypervoltPartnership";
import IndraPartnership from "./pages/news/IndraPartnership";
import PodPointPartnership from "./pages/news/PodPointPartnership";
import QmeritPartnership from "./pages/news/QmeritPartnership";
import ChargeprospParnership from "./pages/news/ChargeprosParnerships";
import YesssEvPartnership from "./pages/news/YesssEvPartnership";
import SonnenPartnership from "./pages/news/SonnenPartnership";
import BpPulsePartnership from "./pages/news/BpPulsePartnership";
import FulcrumPartnership from "./pages/news/FulcrumPartnership";
import TsgPartnership from "./pages/news/TsgPartnership";
import EoChargingPartnership from "./pages/news/EoChargingPartnership";
import RawChargingPartnership from "./pages/news/RawChargingPartnership";
import SevadisParnerships from "./pages/news/SevadisParnerships";
import VebePartnership from "./pages/news/VebePartnership";
import EvseAustraliaPartnership from "./pages/news/EvseAustraliaPartnership";
import EvEnergyIntegrationPartnership from "./pages/news/EvEnergyIntegrationPartnership";
import EaseePartnership from "./pages/news/EaseePartnership";
import ProjectevPartnership from "./pages/news/ProjectevPartnership";
import EvHeroes from "./pages/case-studies/EvHeroes";
import WePowerYourCarStory from "./pages/case-studies/WePowerYourCarStory";
import PlugMeInStory from "./pages/case-studies/PlugMeInStory";
import LadeExpress from "./pages/case-studies/LadeExpress";
import SyncEv from "./pages/case-studies/SyncEv";
import HypervoltStory from "./pages/case-studies/HypervoltStory";
import MrCharger from "./pages/case-studies/MrCharger";
import EnaApiMilestone from "./pages/news/EnaApiMilestone";
import V2gBidirectionalInnovation from "./pages/news/V2gBidirectionalInnovation";
import CambridgeEnterpriseAwards from "./pages/news/CambridgeEnterpriseAwards";
import V2gInstallerPerspective from "./pages/news/V2gInstallerPerspective";
import V2gConsumerStory from "./pages/news/V2gConsumerStory";
import EvEnergyV2xSystem from "./pages/news/EvEnergyV2xSystem";
import TeslaPowershareVision from "./pages/news/TeslaPowershareVision";
import OvoV2gExpertise from "./pages/news/OvoV2gExpertise";
import TeslaDay2023 from "./pages/news/TeslaDay2023";
import PhilNunnCurrentDisruptors from "./pages/news/PhilNunnCurrentDisruptors";
import EviesScaleUpAward from "./pages/news/EviesScaleUpAward";
import FutureImprovedAward from "./pages/news/FutureImprovedAward";
import IndraV2hInsights from "./pages/news/IndraV2hInsights";
import BpPulseFleetInstallations from "./pages/news/BpPulseFleetInstallations";
import InstallationManagementVsCrm from "./pages/news/InstallationManagementVsCrm";
import DnoApplicationEfficiency from "./pages/news/DnoApplicationEfficiency";
import DnoApplicationsVideo from "./pages/news/DnoApplicationsVideo";
import BeyondCrmPerformanceEngine from "./pages/news/BeyondCrmPerformanceEngine";
import SolarFieldServiceManagement from "./pages/news/SolarFieldServiceManagement";
import AutomationSolarBusiness from "./pages/news/AutomationSolarBusiness";
import DigitalisationSkilledTrades from "./pages/news/DigitalisationSkilledTrades";
import EvChargingSiteSelection from "./pages/news/EvChargingSiteSelection";
import WarrantyRegistrationSimplified from "./pages/news/WarrantyRegistrationSimplified";
import FrequentlyAskedQuestions from "./pages/news/FrequentlyAskedQuestions";
import WhyCrmsCannotKeepUp from "./pages/news/WhyCrmsCannotKeepUp";
import EdfContactSolarPartnership from "./pages/news/EdfContactSolarPartnership";
import MotorTraderFeature from "./pages/news/MotorTraderFeature";
import SciTechAwardsSoftwareCompany2026 from "./pages/news/SciTechAwardsSoftwareCompany2026";
import ThankYou from "./pages/ThankYou";
import DealerHomeCharge from "./pages/DealerHomeCharge";
import Automotive from "./pages/Automotive";
import Careers from "./pages/Careers";
import ImplementationTeamLead from "./pages/careers/ImplementationTeamLead";
import PartnerMicrositesPrivacyPolicy from "./pages/PartnerMicrositesPrivacyPolicy";
import ChargerUpgradeTermsAndConditions from "./pages/ChargerUpgradeTermsAndConditions";
import ScrollToTop from "./components/ScrollToTop";

// Extend Window interface for gtag
declare global {
  interface Window {
    gtag: (...args: any[]) => void;
  }
}

const queryClient = new QueryClient();

// Component to handle page tracking only
const GATracker = () => {
  const location = useLocation();
  const { consent } = useCookieConsent();

  useEffect(() => {
    // Only fire page_view if analytics consent is given
    if (!consent?.analytics) return;
    
    // Fire page_view event on route changes
    if (typeof (window as any).gtag !== 'undefined') {
      console.log('Firing page_view event for:', window.location.href);
      (window as any).gtag('event', 'page_view', {
        page_location: window.location.href,
        page_title: document.title
      });
    } else {
      console.log('gtag not available yet - will retry in 1 second');
      setTimeout(() => {
        if (typeof (window as any).gtag !== 'undefined') {
          (window as any).gtag('event', 'page_view', {
            page_location: window.location.href,
            page_title: document.title
          });
        }
      }, 1000);
    }
  }, [location, consent?.analytics]);

  return null;
};

const App = () => (
  <QueryClientProvider client={queryClient}>
    <HelmetProvider>
      <CookieConsentProvider>
        <TooltipProvider>
          <Toaster />
          <Sonner />
          <BrowserRouter>
            <ScrollToTop />
            <GATracker />
            <CookieConsentBanner />
            <CookiePreferencesModal />
            <Routes>
            <Route path="/" element={<Index />} />
            <Route path="/dealer-home-charge" element={<DealerHomeCharge />} />
            <Route path="/automotive" element={<Automotive />} />
            <Route path="/case-studies" element={<CaseStudies />} />
            <Route path="/case-studies/ev-heroes" element={<EvHeroes />} />
            <Route path="/case-studies/we-power-your-car-story" element={<WePowerYourCarStory />} />
            <Route path="/case-studies/plug-me-in-story" element={<PlugMeInStory />} />
            <Route path="/case-studies/lade-express" element={<LadeExpress />} />
            <Route path="/case-studies/sync-ev" element={<SyncEv />} />
            <Route path="/case-studies/hypervolt-story" element={<HypervoltStory />} />
            <Route path="/case-studies/mr-charger" element={<MrCharger />} />
            <Route path="/about-us" element={<AboutUs />} />
            <Route path="/privacy-policy" element={<PrivacyPolicy />} />
            <Route path="/partner-microsites-privacy-policy" element={<PartnerMicrositesPrivacyPolicy />} />
            <Route path="/charger-upgrade-terms-and-conditions" element={<ChargerUpgradeTermsAndConditions />} />
            <Route path="/site-notice" element={<SiteNotice />} />
            <Route path="/news" element={<News />} />
            <Route path="/news/v2g-day-event" element={<V2gDayEvent />} />
            <Route path="/news/affinity-ev-acquisition" element={<AffinityEvAcquisition />} />
            <Route path="/news/jason-cranswick-advisor" element={<JasonCranswickAdvisor />} />
            <Route path="/news/mobility-house-partnership" element={<MobilityHousePartnership />} />
            <Route path="/news/chargepoint-partnership" element={<ChargePointPartnership />} />
            <Route path="/news/kaluza-partnership" element={<KaluzaPartnership />} />
            <Route path="/news/ev-energy-partnership" element={<EvEnergyPartnership />} />
            <Route path="/news/ovo-energy-partnership" element={<OvoEnergyPartnership />} />
            <Route path="/news/scottish-power-partnership" element={<ScottishPowerPartnership />} />
            <Route path="/news/hypervolt-partnership" element={<HypervoltPartnership />} />
            <Route path="/news/indra-partnership" element={<IndraPartnership />} />
            <Route path="/news/pod-point-partnership" element={<PodPointPartnership />} />
            <Route path="/news/qmerit-partnership" element={<QmeritPartnership />} />
            <Route path="/news/chargepros-partnership" element={<ChargeprospParnership />} />
            <Route path="/news/yesss-ev-partnership" element={<YesssEvPartnership />} />
            <Route path="/news/cambridge-enterprise-awards" element={<CambridgeEnterpriseAwards />} />
            <Route path="/news/sonnen-partnership" element={<SonnenPartnership />} />
            <Route path="/news/bp-pulse-partnership" element={<BpPulsePartnership />} />
            <Route path="/news/fulcrum-partnership" element={<FulcrumPartnership />} />
            <Route path="/news/tsg-partnership" element={<TsgPartnership />} />
            <Route path="/news/eo-charging-partnership" element={<EoChargingPartnership />} />
            <Route path="/news/raw-charging-partnership" element={<RawChargingPartnership />} />
            <Route path="/news/sevadis-partnership" element={<SevadisParnerships />} />
            <Route path="/news/vebe-partnership" element={<VebePartnership />} />
            <Route path="/news/evse-australia-partnership" element={<EvseAustraliaPartnership />} />
            <Route path="/news/ev-energy-integration-partnership" element={<EvEnergyIntegrationPartnership />} />
            <Route path="/news/easee-partnership" element={<EaseePartnership />} />
            <Route path="/news/projectev-partnership" element={<ProjectevPartnership />} />
            <Route path="/news/ena-api-milestone" element={<EnaApiMilestone />} />
            <Route path="/news/v2g-bidirectional-innovation" element={<V2gBidirectionalInnovation />} />
            <Route path="/news/v2g-installer-perspective" element={<V2gInstallerPerspective />} />
            <Route path="/news/v2g-consumer-story" element={<V2gConsumerStory />} />
            <Route path="/news/ev-energy-v2x-system" element={<EvEnergyV2xSystem />} />
            <Route path="/news/tesla-powershare-vision" element={<TeslaPowershareVision />} />
            <Route path="/news/ovo-v2g-expertise" element={<OvoV2gExpertise />} />
            <Route path="/news/tesla-day-2023" element={<TeslaDay2023 />} />
            <Route path="/news/phil-nunn-current-disruptors" element={<PhilNunnCurrentDisruptors />} />
            <Route path="/news/evies-scale-up-award" element={<EviesScaleUpAward />} />
            <Route path="/news/future-improved-award" element={<FutureImprovedAward />} />
            <Route path="/news/indra-v2h-insights" element={<IndraV2hInsights />} />
            <Route path="/news/bp-pulse-fleet-installations" element={<BpPulseFleetInstallations />} />
            <Route path="/news/installation-management-vs-crm" element={<InstallationManagementVsCrm />} />
            <Route path="/news/dno-application-efficiency" element={<DnoApplicationEfficiency />} />
            <Route path="/news/dno-applications-video" element={<DnoApplicationsVideo />} />
            <Route path="/news/beyond-crm-performance-engine" element={<BeyondCrmPerformanceEngine />} />
            <Route path="/news/solar-field-service-management" element={<SolarFieldServiceManagement />} />
            <Route path="/news/automation-solar-business" element={<AutomationSolarBusiness />} />
            <Route path="/news/digitalisation-skilled-trades" element={<DigitalisationSkilledTrades />} />
            <Route path="/news/ev-charging-site-selection" element={<EvChargingSiteSelection />} />
            <Route path="/news/warranty-registration-simplified" element={<WarrantyRegistrationSimplified />} />
            <Route path="/news/frequently-asked-questions" element={<FrequentlyAskedQuestions />} />
            <Route path="/news/why-crms-cannot-keep-up" element={<WhyCrmsCannotKeepUp />} />
            <Route path="/news/edf-contact-solar-partnership" element={<EdfContactSolarPartnership />} />
            <Route path="/news/motor-trader-feature" element={<MotorTraderFeature />} />
            <Route path="/news/scitech-awards-software-company-2026" element={<SciTechAwardsSoftwareCompany2026 />} />
            <Route path="/careers" element={<Careers />} />
            <Route path="/careers/implementation-team-lead" element={<ImplementationTeamLead />} />
            <Route path="/thank-you" element={<ThankYou />} />
            
              <Route path="*" element={<NotFound />} />
            </Routes>
          </BrowserRouter>
        </TooltipProvider>
      </CookieConsentProvider>
    </HelmetProvider>
  </QueryClientProvider>
);

export default App;
