import puppeteer from 'puppeteer';

const BASE_URL = 'https://manhwaweb.com';

const PUPPETEER_OPTIONS = {
  headless: 'new',
  args: [
    '--no-sandbox',
    '--disable-setuid-sandbox',
    '--disable-dev-shm-usage'
  ]
};

async function testScraping() {
  console.log('🔍 Analizando estructura de manhwaweb.com...\n');

  const browser = await puppeteer.launch(PUPPETEER_OPTIONS);
  const page = await browser.newPage();
  await page.setUserAgent('Mozilla/5.0 (iPhone; CPU iPhone OS 15_0 like Mac OS X) AppleWebKit/605.1.15');

  const url = `${BASE_URL}/manga/one-piece_1695365223767`;
  console.log(`📄 Cargando: ${url}`);

  await page.goto(url, {
    waitUntil: 'domcontentloaded',
    timeout: 45000
  });

  console.log('⏳ Esperando contenido dinámico...');
  await new Promise(resolve => setTimeout(resolve, 5000));

  // Análisis del HTML
  const analysis = await page.evaluate(() => {
    const result = {
      totalLinks: document.querySelectorAll('a').length,
      leerLinks: 0,
      chapterNumbers: [],
      sampleLinks: [],
      hasPagination: false,
      hasLoadMore: false,
      scrollHeight: document.body.scrollHeight,
      clientHeight: document.documentElement.clientHeight
    };

    // Buscar links /leer/
    const links = document.querySelectorAll('a[href*="/leer/"]');
    result.leerLinks = links.length;

    // Extraer números de capítulo
    links.forEach(link => {
      const href = link.getAttribute('href');
      const match = href.match(/(\d+)(?:\/|\?|\s*$)/);
      if (match) {
        const num = parseInt(match[1]);
        if (num > 0 && num < 10000) {
          result.chapterNumbers.push(num);
        }
      }
    });

    // Muestras de links
    for (let i = 0; i < Math.min(5, links.length); i++) {
      result.sampleLinks.push({
        href: links[i].getAttribute('href'),
        text: links[i].textContent?.trim()
      });
    }

    // Buscar elementos de paginación
    const pagination = document.querySelector('[class*="page"]') ||
                      document.querySelector('[class*="pagination"]') ||
                      document.querySelector('[class*="load"]');
    result.hasPagination = !!pagination;

    const loadMore = document.querySelector('button')?.textContent?.toLowerCase().includes('load') ||
                   document.querySelector('[class*="more"]');
    result.hasLoadMore = !!loadMore;

    return result;
  });

  console.log('\n📊 Análisis de la página:');
  console.log(`   - Total de <a> tags: ${analysis.totalLinks}`);
  console.log(`   - Links con /leer/: ${analysis.leerLinks}`);
  console.log(`   - Altura de documento: ${analysis.scrollHeight}px`);
  console.log(`   - Altura visible: ${analysis.clientHeight}px`);
  console.log(`   - Tiene paginación: ${analysis.hasPagination ? 'Sí' : 'No'}`);
  console.log(`   - Tiene botón "Load More": ${analysis.hasLoadMore ? 'Sí' : 'No'}`);

  console.log('\n🔢 Números de capítulo encontrados:');
  const sortedChapters = [...new Set(analysis.chapterNumbers)].sort((a, b) => a - b);
  console.log(`   - Capítulo más bajo: ${sortedChapters[0]}`);
  console.log(`   - Capítulo más alto: ${sortedChapters[sortedChapters.length - 1]}`);
  console.log(`   - Total único: ${sortedChapters.length}`);

  console.log('\n📝 Ejemplos de links:');
  analysis.sampleLinks.forEach(link => {
    console.log(`   - "${link.text}" → ${link.href}`);
  });

  // Intentar hacer scroll para ver si cargan más
  console.log('\n📜 Intentando scroll para ver si cargan más capítulos...');

  await page.evaluate(() => {
    window.scrollTo(0, document.body.scrollHeight);
  });

  await new Promise(resolve => setTimeout(resolve, 3000));

  const afterScroll = await page.evaluate(() => {
    const links = document.querySelectorAll('a[href*="/leer/"]');
    const nums = [];
    links.forEach(link => {
      const href = link.getAttribute('href');
      const match = href.match(/(\d+)(?:\/|\?|\s*$)/);
      if (match) {
        const num = parseInt(match[1]);
        if (num > 0 && num < 10000) {
          nums.push(num);
        }
      }
    });
    return [...new Set(nums)].sort((a, b) => a - b);
  });

  console.log(`   Después del scroll: ${afterScroll.length} capítulos únicos`);
  console.log(`   Rango: ${afterScroll[0]} - ${afterScroll[afterScroll.length - 1]}`);

  // Buscar específicamente el capítulo 789
  console.log('\n🎯 Buscando capítulo 789 específicamente...');

  const search789 = await page.evaluate(() => {
    // Buscar en todo el HTML
    const html = document.documentElement.innerHTML;
    const has789 = html.includes('789') || html.includes('/leer/one-piece');

    // Intentar URLs comunes
    const possibleUrls = [
      'https://manhwaweb.com/leer/one-piece_1695365223767-789',
      'https://manhwaweb.com/leer/one-piece_1695365223767/789',
      'https://manhwaweb.com/manga/one-piece_1695365223767/789'
    ];

    return {
      found: has789,
      mentions: (html.match(/789/g) || []).length,
      possibleUrls
    };
  });

  console.log(`   - '789' aparece en HTML: ${search789.found ? 'Sí' : 'No'}`);
  console.log(`   - Veces mencionado: ${search789.mentions}`);
  console.log(`   - URLs posibles:`);
  search789.possibleUrls.forEach(url => {
    console.log(`     • ${url}`);
  });

  // Probar una de las URLs
  console.log('\n🔗 Probando URL directa del capítulo 789...');
  const testUrl = 'https://manhwaweb.com/leer/one-piece_1695365223767-789';

  try {
    await page.goto(testUrl, {
      waitUntil: 'domcontentloaded',
      timeout: 30000
    });

    await new Promise(resolve => setTimeout(resolve, 5000));

    const page789Analysis = await page.evaluate(() => {
      const imgs = document.querySelectorAll('img');
      const imageSrcs = [];

      imgs.forEach(img => {
        let src = img.src || img.getAttribute('data-src');
        if (src && !src.includes('avatar') && !src.includes('icon')) {
          imageSrcs.push(src);
        }
      });

      return {
        title: document.title,
        totalImages: imgs.length,
        mangaImages: imageSrcs.length,
        sampleImages: imageSrcs.slice(0, 3)
      };
    });

    console.log(`   ✅ ¡URL funciona!`);
    console.log(`   - Título: ${page789Analysis.title}`);
    console.log(`   - Total <img> tags: ${page789Analysis.totalImages}`);
    console.log(`   - Imágenes de manga: ${page789Analysis.mangaImages}`);

    if (page789Analysis.mangaImages > 0) {
      console.log(`\n   📸 Ejemplos de imágenes:`);
      page789Analysis.sampleImages.forEach((img, i) => {
        console.log(`     ${i + 1}. ${img.substring(0, 80)}...`);
      });

      console.log(`\n   ✅¡CAPÍTULO 789 DISPONIBLE!`);
      console.log(`   URL: ${testUrl}`);
      console.log(`   Total de páginas: ${page789Analysis.mangaImages}`);
    } else {
      console.log(`   ⚠️  No se detectaron imágenes de manga`);
    }

  } catch (error) {
    console.log(`   ❌ Error al acceder a URL directa: ${error.message}`);
  }

  await browser.close();

  console.log('\n' + '='.repeat(60));
  console.log('📋 CONCLUSIONES:');
  console.log('='.repeat(60));
  console.log('El capítulo 789 SÍ EXISTE y se puede acceder directamente.');
  console.log('La URL es: https://manhwaweb.com/leer/one-piece_1695365223767-789');
  console.log('Pero NO aparece en la lista de capítulos de la página principal.');
  console.log('\n💡 Esto sugiere que la página usa lazy loading o paginación.');
  console.log('La app iOS necesitará implementar scroll infinito para ver');
  console.log('todos los capítulos disponibles.');
}

testScraping().catch(console.error);
