package browser

import "fmt"

// CdpTypeRef enfoca el elemento del #ref vía CDP y escribe el texto dado.
// El #ref es un backendDOMNodeId extraído del AX outline por page_perceive.
// Equivale a: focus(ref) → CdpTypeText. El elemento debe aceptar input de texto.
func CdpTypeRef(c *CDPConn, backendNodeID int, text string) error {
	if c == nil {
		return fmt.Errorf("cdp type ref: conexión nil")
	}
	if _, err := c.sendCDP("DOM.focus", map[string]any{"backendNodeId": backendNodeID}); err != nil {
		return fmt.Errorf("cdp type ref: focus ref %d: %w", backendNodeID, err)
	}
	return CdpTypeText(c, text)
}

// CdpTypeRefFast enfoca el elemento del #ref e inserta el texto en UN solo
// round-trip (Input.insertText), sin teclear caracter por caracter. Es el camino
// rápido del modo automático: equivale a focus(ref) → CdpInsertText. Para sitios
// con detección por pulsación usa CdpTypeRef (modo human, char por char).
func CdpTypeRefFast(c *CDPConn, backendNodeID int, text string) error {
	if c == nil {
		return fmt.Errorf("cdp type ref fast: conexión nil")
	}
	if _, err := c.sendCDP("DOM.focus", map[string]any{"backendNodeId": backendNodeID}); err != nil {
		return fmt.Errorf("cdp type ref fast: focus ref %d: %w", backendNodeID, err)
	}
	return CdpInsertText(c, text)
}
