import suggests
import networkx as nx
import pyvis
import time
from pyvis.network import Network
import pickle
import dataset
import codecs

def hierarchy_pos(G, root, levels=None, width=1., height=1.):
    '''If there is a cycle that is reachable from root, then this will see infinite recursion.
       G: the graph
       root: the root node
       levels: a dictionary
               key: level number (starting from 0)
               value: number of nodes in this level
       width: horizontal space allocated for drawing
       height: vertical space allocated for drawing'''
    TOTAL = "total"
    CURRENT = "current"
    def make_levels(levels, node=root, currentLevel=0, parent=None):
        """Compute the number of nodes for each level
        """
        if not currentLevel in levels:
            levels[currentLevel] = {TOTAL : 0, CURRENT : 0}
        levels[currentLevel][TOTAL] += 1
        neighbors = G.neighbors(node)
        for neighbor in neighbors:
            if not neighbor == parent:
                levels =  make_levels(levels, neighbor, currentLevel + 1, node)
        return levels

    def make_pos(pos, node=root, currentLevel=0, parent=None, vert_loc=0):
        dx = 1/levels[currentLevel][TOTAL]
        left = dx/2
        pos[node] = ((left + dx*levels[currentLevel][CURRENT])*width, vert_loc)
        levels[currentLevel][CURRENT] += 1
        neighbors = G.neighbors(node)
        for neighbor in neighbors:
            if not neighbor == parent:
                pos = make_pos(pos, neighbor, currentLevel + 1, node, vert_loc-vert_gap)
        return pos
    if levels is None:
        levels = make_levels({})
    else:
        levels = {l:{TOTAL: levels[l], CURRENT:0} for l in levels}
    vert_gap = height / (max([l for l in levels])+1)
    return make_pos({})

prefix='C:\\gitlab\\AI_Video_LP\\webSite\\static\\choozmo-seo\\'
#filename='videomarketing'
#filename='marketing_strategy'
#filename='taiwan'
filename='japan_taoyuan'

table=[]
#fr=codecs.open('C:/Users/jared/Downloads/davi.csv','r','utf-16')
#fr=codecs.open('C:/Users/jared/Downloads/c100.csv','r','utf-16')
#fr=codecs.open('C:/Users/jared/Downloads/gap.csv','r','utf-8')
fr=codecs.open('C:/Users/jared/Downloads/'+filename+'.csv','r','utf-16')

lines=fr.readlines()
fr.close()

for l in lines[3:]:
    elmts=l.split('\t')
#    print(elmts)
    print(elmts[0])
#    print(elmts[2])
    cnt=0
    try:
#        cnt=int(elmts[2])
        cnt=int(elmts[1])

    except:
        cnt=0
    table.append({'q':elmts[0],'cnt':cnt})



G = nx.Graph()


elmt_dict={}
root=None
for c in table:
    q=c['q']
    elmts=q.split(' ')
    for e in elmts:
        if elmt_dict.get(e) is None:
            elmt_dict[e]=[q]
        else:
            elmt_dict[e].append(q)

print(elmt_dict)

idx=0
for k,v in elmt_dict.items():
    if len(v)>2 :
#    if len(v)>2 and len(v)<28:

#    if len(v)>2:

        for e in v:
            G.add_edge(k,e,weight=1)
            root=k

        idx+=1
G.remove_edges_from( list(nx.selfloop_edges(G)))

G2=nx.minimum_spanning_tree(G,weight=5)

#G3=hierarchy_pos(G2,root)

pyG = Network(height="750px", width="100%",bgcolor="#333333",font_color="white")

#pyG.set_options()
pyG.from_nx(G2)
#pyG.enable_physics(False)
#pyG.barnes_hut()
#pyG.show('gs.html')
pyG.show(prefix+filename+'.html')

print(idx)