from gargantext.util.http import *
from gargantext.util.db import *
from gargantext.util.db_cache import cache
from gargantext.models import *
from gargantext.constants import *
from gargantext.settings import *

from datetime import datetime


@requires_auth
def explorer(request, project_id, corpus_id):
    '''
    Graph explorer, also known as TinaWebJS, using SigmaJS.
    Nodes are ngrams (from title or abstract or journal name.
    Links represent proximity measure.
    '''

    # we pass our corpus
    corpus = cache.Node[corpus_id]

    # get the maplist_id for modifications
    maplist_id = corpus.children(typename="MAPLIST").first().id

    # and the project just for project.id in corpusBannerTop
    project = cache.Node[project_id]

    # rendered page : explorer.html
    return render(
        template_name = 'graphExplorer/explorer.html',
        request = request,
        context = {
            'debug'     : settings.DEBUG   ,
            'request'   : request          ,
            'user'      : request.user     ,
            'date'      : datetime.now()   ,
            'project'   : project          ,
            'corpus'    : corpus           ,
            'maplist_id': maplist_id       ,
            'view'      : 'graph'          ,
        },
    )



@requires_auth
def myGraphs(request, project_id, corpus_id):
    '''
    List all of my Graphs
    '''

    user = cache.User[request.user.id]
    # we pass our corpus
    corpus = cache.Node[corpus_id]

    # and the project just for project.id in corpusBannerTop
    project = cache.Node[project_id]

    coocs = corpus.children('COOCCURRENCES', order=True).all()
    
    coocs_count = dict()
    for cooc in coocs:
        cooc_nodes = session.query(NodeNgramNgram).filter(NodeNgramNgram.node_id==cooc.id).count()
        coocs_count[cooc.id] = cooc_nodes

    return render(
        template_name = 'pages/corpora/myGraphs.html',
        request = request,
        context = {
            'debug'     : settings.DEBUG,
            'request'   : request,
            'user'      : request.user,
            'date'      : datetime.now(),
            'project'   : project,
            'resourcename' : resourcename(corpus),
            'corpus'    : corpus,
            'view'      : 'myGraph',
            'coocs'     : coocs,
            'coocs_count' : coocs_count
        },
    )