import datetime
import os.path
import re

import django.db.models
from django.db.models import Min, Max
from django.shortcuts import render, render_to_response
from django.template import Context, loader
from django.template.defaultfilters import slugify
from django.utils import timezone
#from django.views.generic.list import ListView

from troggle.core.models import Expedition, Person, PersonExpedition
from troggle.core.models_caves import Cave, LogbookEntry
from troggle.core.models_survex import SurvexBlock

import troggle.settings as settings


def pathsreport(request):
    pathsdict={}
    try:
        pathsdict={
#       "BOGUS" : settings.BOGUS,
        "CAVEDESCRIPTIONS" : settings.CAVEDESCRIPTIONS,
        "DIR_ROOT" : settings.DIR_ROOT,
        "ENTRANCEDESCRIPTIONS" : settings.ENTRANCEDESCRIPTIONS,
        "EXPOUSER_EMAIL" : settings.EXPOUSER_EMAIL,
        "EXPOUSERPASS" :"<redacted>",
        "EXPOUSER" : settings.EXPOUSER,
        "EXPOWEB" : settings.EXPOWEB,
        "EXPOWEB_URL" : settings.EXPOWEB_URL,
        "FILES" : settings.FILES,
        "JSLIB_URL" : settings.JSLIB_URL,
        "LOGFILE" : settings.LOGFILE,
        "LOGIN_REDIRECT_URL" : settings.LOGIN_REDIRECT_URL,
        "MEDIA_ROOT" : settings.MEDIA_ROOT,
        "MEDIA_URL" : settings.MEDIA_URL,
        "PHOTOS_URL" : settings.PHOTOS_URL,
        "PYTHON_PATH" : settings.PYTHON_PATH,
        "REPOS_ROOT_PATH" : settings.REPOS_ROOT_PATH,
        "ROOT_URLCONF" : settings.ROOT_URLCONF,
        "STATIC_URL" : settings.STATIC_URL,
        "SURVEX_DATA" : settings.SURVEX_DATA,
        "SURVEY_SCANS" : settings.SURVEY_SCANS,
        "SURVEYS" : settings.SURVEYS,
        "SURVEYS_URL" : settings.SURVEYS_URL,
        "THREEDCACHEDIR" : settings.THREEDCACHEDIR,
        "TUNNEL_DATA" : settings.TUNNEL_DATA,
        "URL_ROOT" : settings.URL_ROOT
        }
    except:
        pathsdict["! EXCEPTION !"] = "missing string constant in troggle/settings"

    # settings are unique by paths are not
    ncodes = len(pathsdict)
    bycodeslist = sorted(pathsdict.items())
    
    # create a temporary list
    bypathslist = []
    # iterate through the dictionary and append each tuple into the temporary list 
    for key, value in pathsdict.items():
        tmptuple = (key, value)
        bypathslist.append(tmptuple)
    # bypathslist = sorted(bypathslist)

    return render(request, 'pathsreport.html', { 
        "pathsdict":pathsdict, 
        "bycodeslist":bycodeslist, 
        "bypathslist":bypathslist, 
        "ncodes":ncodes})

def stats(request):
    statsDict={}
    statsDict['expoCount'] = "{:,}".format(Expedition.objects.count())
    statsDict['caveCount'] = "{:,}".format(Cave.objects.count())
    statsDict['personCount'] = "{:,}".format(Person.objects.count())
    statsDict['logbookEntryCount'] = "{:,}".format(LogbookEntry.objects.count())

    legsbyexpo = [ ]
    addupsurvexlength = 0
    for expedition in Expedition.objects.all():
        survexblocks = expedition.survexblock_set.all()
        legsyear=0
        survexleglength = 0.0
        for survexblock in survexblocks:
            survexleglength += survexblock.legslength
            try:
                legsyear += int(survexblock.legsall)
            except:
                pass
        addupsurvexlength += survexleglength
        legsbyexpo.append((expedition, {"nsurvexlegs": "{:,}".format(legsyear), 
                "survexleglength":"{:,.0f}".format(survexleglength)}))
    legsbyexpo.reverse() 

    renderDict = {**statsDict, **{ "addupsurvexlength":addupsurvexlength/1000, "legsbyexpo":legsbyexpo }} # new syntax
    return render(request,'statistics.html',  renderDict)
