package browser

import (
	"fmt"
	"time"
)

// CdpWaitElement espera hasta que un selector CSS exista en el DOM.
// Hace polling con Runtime.evaluate hasta que el elemento aparezca o se agote el timeout.
// Retorna error si el timeout se agota sin encontrar el elemento.
func CdpWaitElement(c *CDPConn, selector string, timeout time.Duration) error {
	if c == nil {
		return fmt.Errorf("cdp wait element: conexion nula")
	}
	if timeout <= 0 {
		timeout = 10 * time.Second
	}

	deadline := time.Now().Add(timeout)
	interval := 200 * time.Millisecond

	js := fmt.Sprintf(`document.querySelector(%q) !== null`, selector)

	for time.Now().Before(deadline) {
		result, err := CdpEvaluate(c, js)
		if err != nil {
			// Error en evaluate — puede que la pagina aun no este lista
			time.Sleep(interval)
			continue
		}
		if result == "true" {
			return nil
		}
		time.Sleep(interval)
	}

	return fmt.Errorf("cdp wait element: selector %q no encontrado despues de %s", selector, timeout)
}
