from plotly.graph_objs import Scatter, Layout
import plotly.graph_objects as go
import plotly
import networkx as nx
import sys

G = nx.random_geometric_graph(50, 0.125)
# G = nx.Graph()
# G.add_edge('A', 'B', weight=4)
# G.add_edge('B', 'D', weight=2)
# G.add_edge('A', 'C', weight=3)
# G.add_edge('C', 'D', weight=4)
# nx.shortest_path(G, 'A', 'D', weight='weight')
# ['A', 'B', 'D']
# G = nx.line_graph(30)
# print(G)
G = nx.complete_graph(30)
for g in G:
    print(g)
    
print(G)
pos = nx.circular_layout(G, scale=1, center=[0, 0])
pos = nx.spring_layout(G)

edge_x = []
edge_y = []
for edge in pos:
    print(pos[edge])
    
    x0= pos[edge][0]
    y0= pos[edge][1]
    
    edge_x.append(0)
    edge_x.append(x0)
    edge_x.append(None)
    edge_y.append(0)
    edge_y.append(y0)
    edge_y.append(None)

edge_trace = go.Scatter(
    x=edge_x, y=edge_y,
    line=dict(width=1, color='#888'),
    hoverinfo='none',
    mode='lines')

node_x = [0]
node_y = [0]
for node in pos:
    x = pos[node][0]
    y = pos[node][1]
    node_x.append(x)
    node_y.append(y)

node_trace = go.Scatter(
    x=node_x, y=node_y,
    mode='markers',
    hoverinfo='text',
    text='name',
    marker=dict(
        showscale=True,
        # colorscale options
        #'Greys' | 'YlGnBu' | 'Greens' | 'YlOrRd' | 'Bluered' | 'RdBu' |
        #'Reds' | 'Blues' | 'Picnic' | 'Rainbow' | 'Portland' | 'Jet' |
        #'Hot' | 'Blackbody' | 'Earth' | 'Electric' | 'Viridis' |
        colorscalbe='YlGnBu',
        reversescale=True,
        color=[],
        size=40,
        colorbar=dict(
            thickness=15,
            title='Node Connections',
            xanchor='left',
            titleside='right'
        ),
        line_width=4))

# node_adjacencies = []
# node_text = []
# for node, adjacencies in enumerate(G.adjacency()):
#     node_adjacencies.append(len(adjacencies[1]))
#     node_text.append('# of connections: '+str(len(adjacencies[1])))

# node_trace.marker.color = node_adjacencies
# node_trace.text = node_text

fig = go.Figure(data=[edge_trace, node_trace],
             layout=go.Layout(
                title='<br>Network graph made with Python',
                titlefont_size=16,
                showlegend=True,
                hovermode='closest',
                margin=dict(b=20,l=5,r=5,t=40),
                annotations=[ dict(
                    text="Python code: <a href='https://plotly.com/ipython-notebooks/network-graphs/'> https://plotly.com/ipython-notebooks/network-graphs/</a>",
                    showarrow=False,
                    xref="paper", yref="paper",
                    x=0.005, y=-0.002 ) ],
                xaxis=dict(showgrid=False, zeroline=False, showticklabels=False),
                yaxis=dict(showgrid=False, zeroline=False, showticklabels=False))
                )
fig.show()
