
import puppeteer from 'puppeteer';


async function runPuppeteer() {
    const browser = await puppeteer.launch({
        headless: false,
        //slowMo: 250,
        defaultViewport: null
        //args: ['--no-sandbox', '--disable-setuid-sandbox']
    });

    const page = await browser.newPage();
  
    try {
      //Configurar un user-agent personalizado
      await page.setUserAgent(
          'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36'
      );

      // Navegar a Google
      await page.goto('https://consultaprocesos.ramajudicial.gov.co/Procesos/NombreRazonSocial/');
      // Esperar a que la página se cargue completamente
      //await page.waitForNavigation({ waitUntil: 'networkidle0' });


      /******************************************************************************************/
      /* Da clic sobre procesos y/o todos los procesos. Sobre el segundo boton de radio                                         */   
      /******************************************************************************************/
      const selector00 = '#mainContent > div > div > div > div:nth-child(1) > div > div.mt-1.col.col-12 > div > div.row > div > div > div > div > div.v-input__slot > div > div:nth-child(2) > label';
      //const selector00 = '.v-input__slot label'; //da clic en el primer boton

      // Verificar si el elemento es visible
      const isElementVisible = await page.evaluate((selector00) => {
        const element = document.querySelector(selector00);
        return element && element.offsetParent !== null; // offsetParent verifica si el elemento es visible
      }, selector00);

      if (isElementVisible) {
        // Desplazarse hacia el elemento para asegurarse de que esté en la vista
        await page.evaluate((selector00) => {
          const element = document.querySelector(selector00);
          if (element) {
            element.scrollIntoView({ behavior: 'smooth', block: 'center' });
          }
        }, selector00);
        // Hacer clic en el elemento
        await page.click(selector00); //abre el menu seleccionable
      }
      

      /******************************************************************************************/
      /* Selecciona la opción Jurídica o Natural                                         */   
      /******************************************************************************************/
      //const abre_menu = '#mainContent > div > div > div > div:nth-child(1) > div > div.mt-1.col.col-12 > div > div.v-input.theme--light.v-text-field.v-text-field--is-booted.v-select.custom';
      const abre_menu = '.v-select.custom';
      await page.waitForSelector(abre_menu);
      await page.click(abre_menu);
      //selecciona la opción respectiva
      let seleccion = 'Natural';

      if (seleccion == 'Natural') {
          const selector02 = '.v-list-item--link:first-child .v-list-item__title';
          await page.waitForSelector(selector02, { visible: true, timeout: 5000 });
          //const opciones = await page.$$('#mainContent > div > div > div > div:nth-child(1) > div > div.mt-1.col.col-12 > div > div.v-input.v-input--is-focused.theme--light.v-text-field.v-text-field--is-booted.v-select.primary--text.custom > div > div.v-input__slot > div.v-select__slot > div.v-select__selections');
          const opciones = await page.$$('#mainContent > div > div > div > div:nth-child(1) > div > div.mt-1.col.col-12 > div > div.v-input.v-input--is-focused.theme--light.v-text-field.v-text-field--is-booted.v-select.primary--text.custom');
          //const opciones = await page.$$('#mainContent > div > div > div > div:nth-child(1) > div > div.mt-1.col.col-12 > div > div.v-input.v-input--is-focused.theme--light.v-text-field.v-text-field--is-booted.v-select.primary--text.custom > div > div.v-input__slot > div.v-select__slot');
          const textoBuscado = 'Natural'; // Texto exacto de la opción
          for (const opcion of opciones) {
              const texto = await page.evaluate(el => el.textContent.trim(), opcion);
              if (texto === textoBuscado) {
                  await opcion.click();
                  break;
              }
          }

          await page.click(selector02); //da clic
      } else if (seleccion == 'Jurídica'){
        const selector02 = '.v-list-item--link:nth-child(2) .v-list-item__title';
        await page.waitForSelector(selector02, { visible: true, timeout: 5000 });
        //const opciones = await page.$$('#mainContent > div > div > div > div:nth-child(1) > div > div.mt-1.col.col-12 > div > div.v-input.v-input--is-focused.theme--light.v-text-field.v-text-field--is-booted.v-select.primary--text.custom > div > div.v-input__slot > div.v-select__slot > div.v-select__selections');
        const opciones = await page.$$('#mainContent > div > div > div > div:nth-child(1) > div > div.mt-1.col.col-12 > div > div.v-input.v-input--is-focused.theme--light.v-text-field.v-text-field--is-booted.v-select.primary--text.custom');
        //const opciones = await page.$$('#mainContent > div > div > div > div:nth-child(1) > div > div.mt-1.col.col-12 > div > div.v-input.v-input--is-focused.theme--light.v-text-field.v-text-field--is-booted.v-select.primary--text.custom > div > div.v-input__slot > div.v-select__slot');
        const textoBuscado = 'Jurídica'; // Texto exacto de la opción
        for (const opcion of opciones) {
            const texto = await page.evaluate(el => el.textContent.trim(), opcion);
            if (texto === textoBuscado) {
                await opcion.click();
                break;
            }
        }

        await page.click(selector02); //da clic
      }
      

      /***************************************************************************************/
      /*** Ingresa el texto a buscar en la caja de texto (nombre de la persona o empresa) ****/
      /***************************************************************************************/
      // Esperar a que el campo de entrada esté disponible
      const searchInputSelector = 'div.v-text-field__slot > input[type="text"]';
      await page.waitForSelector(searchInputSelector);
      // Escribir texto en el campo de búsqueda
      const searchText = 'Ramon Hernandez'; // Cambia esto al texto que deseas buscar
      await page.type(searchInputSelector, searchText);


      /***************************************************************************************/
      /*** Ahora daremos clic sobre el boton consultar) ****/
      /***************************************************************************************/
      //daremos clic sobre un boton
      const selector03 = '#mainContent > div > div > div > div:nth-child(1) > div > div.mt-1.col.col-12 > div > div:nth-child(5) > button.v-btn.v-btn--is-elevated.v-btn--has-bg.theme--light.v-size--default.success.mt-2.mx-2.font-weight-bold';
      await page.click(selector03);
      // Esperar a que aparezca el modal
      await page.waitForSelector('#app > div.v-dialog__content.v-dialog__content--active > div > div > div:nth-child(1) > div > div > div.v-alert__content'); // Ajusta el selector según tu página
      // Capturar el mensaje del modal
      const modalMessage = await page.$eval('#app > div.v-dialog__content.v-dialog__content--active > div > div > div:nth-child(1) > div > div > div.v-alert__content', element => element.textContent);
      console.log('Mensaje del modal:', modalMessage);
      
  } catch (error) {
    console.error('Ocurrió un error:', error);
  } finally {
    await browser.close();
  }
}

(async () => {
    try {
      //const searchText = 'Juan Perez'; // Cambia esto al texto que deseas buscar
      const results = await runPuppeteer();
      //console.log('los resultados en JSON',JSON.stringify(results, null, 2));
    } catch (error) {
      console.error('Error:', error.message);
    }
  })();