// lib/demo-detector.ts
import { NextRequest } from "next/server";

/**
 * Détecte si l'application doit fonctionner en mode démo
 * 
 * Méthodes de détection (par ordre de priorité) :
 * 1. Variable d'environnement DEMO_MODE=true
 * 2. Sous-domaine demo.* (ex: demo.votresite.com)
 * 3. Header x-demo-mode=true (pour tests et API)
 */
export function detectDemoMode(req?: NextRequest): boolean {
  // 1. Variable d'environnement (priorité haute)
  if (process.env.DEMO_MODE === 'true') {
    return true;
  }

  // 2. Si on a une requête, vérifier le sous-domaine
  if (req) {
    const hostname = req.nextUrl.hostname;
    
    // Détection spécifique pour demo.odentas.fr
    if (hostname === 'demo.odentas.fr' || hostname.startsWith('demo.')) {
      return true;
    }

    // 3. Header spécial pour tests
    const demoHeader = req.headers.get('x-demo-mode');
    if (demoHeader === 'true') {
      return true;
    }
  }

  return false;
}

/**
 * Version côté serveur pour les API routes
 * Utilise les headers de la requête pour détecter le mode démo
 */
export function detectDemoModeFromHeaders(headers: Headers): boolean {
  // 1. Variable d'environnement
  if (process.env.DEMO_MODE === 'true') {
    return true;
  }

  // 2. Header spécial
  const demoHeader = headers.get('x-demo-mode');
  if (demoHeader === 'true') {
    return true;
  }

  // 3. Header host pour sous-domaine
  const host = headers.get('host');
  if (host && (host === 'demo.odentas.fr' || host.startsWith('demo.'))) {
    return true;
  }

  return false;
}

/**
 * Version côté client pour React
 * Utilise window.location pour détecter le mode démo
 */
export function detectDemoModeClient(): boolean {
  // 1. Variable d'environnement publique
  if (process.env.NEXT_PUBLIC_DEMO_MODE === 'true') {
    return true;
  }

  // 2. Côté client, vérifier le hostname
  if (typeof window !== 'undefined') {
    const hostname = window.location.hostname;
    if (hostname === 'demo.odentas.fr' || hostname.startsWith('demo.')) {
      return true;
    }
  }

  return false;
}

/**
 * Utilitaire pour logger l'état du mode démo
 */
export function logDemoMode(isDemo: boolean, context: string = '', req?: NextRequest) {
  if (isDemo) {
    const hostname = req?.nextUrl.hostname || (typeof window !== 'undefined' ? window.location.hostname : 'unknown');
    const path = req?.nextUrl.pathname || (typeof window !== 'undefined' ? window.location.pathname : 'unknown');
    
    console.log(`🎭 [DEMO ${context}] Mode démo actif - Host: ${hostname}, Path: ${path}`);
  }
}