# find_free_port
# ---------------
# Busca el primer puerto libre en un rango dado.
# Imprime el puerto encontrado a stdout.
# Sale con exit code 1 si no encuentra ninguno.
#
# USO (sourced):
#   source find_free_port.sh
#   port=$(find_free_port 8888 8899)

find_free_port() {
    local start="${1:-8888}"
    local end="${2:-8899}"

    for ((port=start; port<=end; port++)); do
        if ! ss -tln 2>/dev/null | grep -q ":${port} " && \
           ! lsof -i:"$port" >/dev/null 2>&1; then
            echo "$port"
            return 0
        fi
    done

    echo "find_free_port: no se encontro puerto libre en rango ${start}-${end}" >&2
    return 1
}
