#-*- coding: utf-8 -*-
from django.shortcuts import render
from django.shortcuts import get_object_or_404, render
from django.http import HttpResponseRedirect, HttpResponse
from django.urls import reverse
from backoffice.models import *
from backoffice.forms import TokenForm
from django.shortcuts import redirect, render_to_response
from django.views import View
from django.template import RequestContext
from django.shortcuts import render
import facebook
from datetime import datetime,timedelta
from django.utils import timezone
import dateutil.parser as dateparser
from django.contrib.gis.geos import Point
from django.template.defaultfilters import slugify
from dateutil.parser import parse
import logging
# Get an instance of a logger
logger = logging.getLogger('django')

def robust_decode(bs):
    if bs is None:
        return ''
    if type(bs) is dict:
        logger.info("on a dico !!!!")
        for element in bs:
            logger.info("Element %s"%element)
    else:
        return bs
        """
        cr = None
        try:
            cr = bs.decode('utf8')
        except Exception as e:
            logger.info("==== decode UTF8 erreur pour %s essaye en latin1 car %s"%(u''+bs,e))
            cr =  bs.decode('latin1')
        logger.info("--On renvoi %s" % (cr))
        return cr
"""

def processData(eventList):
    errors=  []
    try:
        if eventList:
            for eventFB in eventList:
                try:
                    facebookId = robust_decode(eventFB['id'])
                    logger.info("Event %s %s"%(facebookId,robust_decode(eventFB['name'])))
                    eventExit = Event.objects.filter(facebookId=facebookId)
                    startTime = eventFB['start_time']
                    endTime = eventFB['end_time']

                    dateParseDeb = parse(startTime,ignoretz=False)
                    dateParseFin = parse(endTime, ignoretz=False)
                    timeDuration = dateParseFin - dateParseDeb
                    tempsTotal = timeDuration.total_seconds()/86400
                    logger.info("On a dateParseDeb %s et dateParseFin %s Duration %f Jour %f"%(dateParseDeb,dateParseFin,timeDuration.total_seconds(),tempsTotal))
                    if tempsTotal>1:
                        logger.info("----Event sur plusieurs jours")
                except Exception as e:
                    logger.info("Error %s"%e)
    except Exception as e:
        logger.error("!!!!!!!!!!!!!!!!! ERREUR %s"%eventFB)
        logger.error(e)
        errors.append("Exception %s pour event %s" % (e,eventFB))
    logger.info("on renvoi errors list %s"%errors)
    return errors

def run():
    token="EAAGPYWB5qgYBAEYPVxpW4xBWBAgnpWjAhNtBQs8YVR7deOZBvuQ8QcqbUtfeGD682J0Mf6swbJGcZBNdhxZAvZByI5WgK28xCbf66yU1abdGb0T3rZB56TR6jM1XIdEcsCRozEyeva901ZAUv3SvHXbXUkNPiiZA2AfOTakao0eDmsEEojIGCnEbNZCAKarOEFWo0ZBnqBkXDOAZDZD"
    listErrors = []
    graph = facebook.GraphAPI(access_token=token, version=3.0)
    try:
        logger.info("========= NOUVEL IMPORT ===========")
        queryPath = "/me/events/?fields=cover,name,description,place,start_time,end_time"
        yaNext = True
        errors = None
        while yaNext:
            events = graph.request(queryPath)
            logger.info("queryPath %s" % queryPath)
            eventList = events['data']
            errors = processData(eventList)
            for error in errors:
                listErrors.append(error)
            paging = events['paging']
            if paging:
                if 'next' in paging:
                    next = paging['next']
                    shortUrl = next.replace('https://graph.facebook.com/v3.0/', '')
                    logger.info("on query next %s" % shortUrl)
                    queryPath = shortUrl
                else:
                    logger.info("Fin du paging")
                    yaNext = False
            else:
                logger.info("Fin du paging")
                yaNext = False
        return listErrors

    except Exception as e:
        logger.error(e)
        listErrors.append(e)