package browser

import (
	"fmt"
	"os"
)

// CdpClose cierra la conexion WebSocket CDP y, si pid > 0, mata el proceso Chrome.
// Siempre intenta cerrar la conexion aunque el kill falle, y viceversa.
// Retorna el primer error encontrado.
func CdpClose(c *CDPConn, pid int) error {
	var firstErr error

	if c != nil && !c.closed {
		c.closed = true
		if err := c.conn.Close(); err != nil {
			firstErr = fmt.Errorf("cdp close: cerrar websocket: %w", err)
		}
	}

	if pid > 0 {
		proc, err := os.FindProcess(pid)
		if err != nil {
			if firstErr == nil {
				firstErr = fmt.Errorf("cdp close: encontrar proceso %d: %w", pid, err)
			}
		} else {
			if err := proc.Kill(); err != nil {
				if firstErr == nil {
					firstErr = fmt.Errorf("cdp close: matar proceso %d: %w", pid, err)
				}
			}
		}
	}

	return firstErr
}
