import { readFileSync, existsSync } from 'fs';
import { join, resolve } from 'path';

// SEO-Meta-Daten für verschiedene Routen
const seoData = {
  '/': {
    title: 'SingleChat - Chat, Single-Chat und Bildaustausch',
    description: 'Willkommen auf SingleChat - deine erste Adresse für Chat, Single-Chat und Bildaustausch. Chatte mit Menschen aus aller Welt, finde neue Kontakte und teile Erinnerungen sicher und komfortabel.',
    keywords: 'Chat, Single-Chat, Bildaustausch, Online-Chat, Singles, Kontakte, Community',
    ogTitle: 'SingleChat - Chat, Single-Chat und Bildaustausch',
    ogDescription: 'Willkommen auf SingleChat - deine erste Adresse für Chat, Single-Chat und Bildaustausch.',
    ogType: 'website',
    ogUrl: 'https://ypchat.net/',
    ogImage: 'https://ypchat.net/static/favicon.png'
  },
  '/partners': {
    title: 'Partner - SingleChat',
    description: 'Unsere Partner und befreundete Seiten. Entdecke weitere interessante Angebote und Communities.',
    keywords: 'Partner, Links, befreundete Seiten, Community',
    ogTitle: 'Partner - SingleChat',
    ogDescription: 'Unsere Partner und befreundete Seiten.',
    ogType: 'website',
    ogUrl: 'https://ypchat.net/partners',
    ogImage: 'https://ypchat.net/static/favicon.png'
  }
};

// HTML-Template für Pre-Rendering
function generateHTML(route, meta, __dirname) {
  // Versuche, die gebaute index.html zu lesen
  const distIndexPath = join(__dirname, '../docroot/dist/index.html');
  
  console.log('[SEO] Prüfe gebaute index.html:', distIndexPath);
  console.log('[SEO] Datei existiert:', existsSync(distIndexPath));
  
  if (!existsSync(distIndexPath)) {
    // Fallback: Gebaute index.html nicht gefunden
    console.error('WARNUNG: Gebaute index.html nicht gefunden:', distIndexPath);
    return null;
  }
  
  // Verwende die gebaute index.html (mit korrekten Asset-Pfaden von Vite)
  let baseHTML = readFileSync(distIndexPath, 'utf-8');
  console.log('[SEO] Gebaute HTML geladen, Länge:', baseHTML.length);
  console.log('[SEO] Enthält Script-Tags:', baseHTML.includes('<script'));
  
  // Ersetze Meta-Tags in der gebauten HTML
  baseHTML = baseHTML.replace(/<title>.*?<\/title>/, `<title>${meta.title}</title>`);
  
  // Ersetze oder füge description hinzu
  if (baseHTML.includes('<meta name="description"')) {
    baseHTML = baseHTML.replace(/<meta name="description"[^>]*>/g, `<meta name="description" content="${meta.description}">`);
  } else {
    baseHTML = baseHTML.replace('</head>', `  <meta name="description" content="${meta.description}">\n</head>`);
  }
  
  // Ersetze oder füge keywords hinzu
  if (baseHTML.includes('<meta name="keywords"')) {
    baseHTML = baseHTML.replace(/<meta name="keywords"[^>]*>/g, `<meta name="keywords" content="${meta.keywords}">`);
  } else {
    baseHTML = baseHTML.replace('</head>', `  <meta name="keywords" content="${meta.keywords}">\n</head>`);
  }
  
  // Ersetze oder füge Open Graph Tags hinzu
  const ogTags = `
  <meta property="og:title" content="${meta.ogTitle}">
  <meta property="og:description" content="${meta.ogDescription}">
  <meta property="og:type" content="${meta.ogType}">
  <meta property="og:url" content="${meta.ogUrl}">
  <meta property="og:image" content="${meta.ogImage}">
  <meta name="twitter:card" content="summary">
  <meta name="twitter:title" content="${meta.ogTitle}">
  <meta name="twitter:description" content="${meta.ogDescription}">
  <meta name="twitter:image" content="${meta.ogImage}">
  <link rel="canonical" href="${meta.ogUrl}">`;
  
  // Entferne alte OG/Twitter/Canonical Tags falls vorhanden (nur Meta-Tags, keine Script-Tags!)
  baseHTML = baseHTML.replace(/<meta property="og:[^>]*>/g, '');
  baseHTML = baseHTML.replace(/<meta name="twitter:[^>]*>/g, '');
  baseHTML = baseHTML.replace(/<link rel="canonical"[^>]*>/g, '');
  
  // Füge neue Tags vor </head> ein (aber NACH den Script-Tags!)
  // Finde die Position von </head> und füge die Tags davor ein
  const headEndIndex = baseHTML.indexOf('</head>');
  if (headEndIndex !== -1) {
    baseHTML = baseHTML.substring(0, headEndIndex) + ogTags + '\n' + baseHTML.substring(headEndIndex);
  }
  
  // Füge robots meta hinzu falls nicht vorhanden
  if (!baseHTML.includes('<meta name="robots"')) {
    const headEndIndex2 = baseHTML.indexOf('</head>');
    if (headEndIndex2 !== -1) {
      baseHTML = baseHTML.substring(0, headEndIndex2) + `  <meta name="robots" content="index, follow">\n` + baseHTML.substring(headEndIndex2);
    }
  }
  
  console.log('[SEO] HTML nach Manipulation, Länge:', baseHTML.length);
  console.log('[SEO] Enthält Script-Tags nach Manipulation:', baseHTML.includes('<script'));
  
  return baseHTML;
}

export function setupSEORoutes(app, __dirname) {
  // Pre-Rendering für SEO-relevante Routen (nur in Production)
  // In Development wird die normale index.html verwendet
  const IS_PRODUCTION = process.env.NODE_ENV === 'production';
  
  if (IS_PRODUCTION) {
    const distIndexPath = resolve(__dirname, '../docroot/dist/index.html');
    
    // Pre-Rendering für Hauptseite
    app.get('/', (req, res) => {
      const meta = seoData['/'];
      const html = generateHTML('/', meta, __dirname);
      if (html) {
        res.send(html);
      } else {
        // Fallback: Verwende die gebaute index.html direkt (ohne Meta-Tag-Anpassung)
        if (existsSync(distIndexPath)) {
          res.sendFile(distIndexPath);
        } else {
          console.error('FEHLER: Gebaute index.html nicht gefunden:', distIndexPath);
          res.status(500).send('Gebaute index.html nicht gefunden. Bitte führe "npm run build" aus.');
        }
      }
    });
    
    // Pre-Rendering für Partners-Seite
    app.get('/partners', (req, res) => {
      const meta = seoData['/partners'];
      const html = generateHTML('/partners', meta, __dirname);
      if (html) {
        res.send(html);
      } else {
        // Fallback: Verwende die gebaute index.html direkt (ohne Meta-Tag-Anpassung)
        if (existsSync(distIndexPath)) {
          res.sendFile(distIndexPath);
        } else {
          console.error('FEHLER: Gebaute index.html nicht gefunden:', distIndexPath);
          res.status(500).send('Gebaute index.html nicht gefunden. Bitte führe "npm run build" aus.');
        }
      }
    });
  }
  
  // robots.txt
  app.get('/robots.txt', (req, res) => {
    const robotsTxt = `User-agent: *
Allow: /
Allow: /partners
Disallow: /api/
Disallow: /static/logs/

Sitemap: https://ypchat.net/sitemap.xml
`;
    res.type('text/plain');
    res.send(robotsTxt);
  });
  
  // sitemap.xml
  app.get('/sitemap.xml', (req, res) => {
    const sitemap = `<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
  <url>
    <loc>https://ypchat.net/</loc>
    <lastmod>${new Date().toISOString().split('T')[0]}</lastmod>
    <changefreq>daily</changefreq>
    <priority>1.0</priority>
  </url>
  <url>
    <loc>https://ypchat.net/partners</loc>
    <lastmod>${new Date().toISOString().split('T')[0]}</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.8</priority>
  </url>
</urlset>`;
    res.type('application/xml');
    res.send(sitemap);
  });
}

