#!/usr/bin/python
# -*- coding: UTF-8 -*-
import os
import json

from datetime import datetime

from pymongo import MongoClient

from channels.handler import AsgiHandler
from channels.auth import channel_session_user
from channels import Group
# Here we create the db named "dbplots"
host = os.environ.get('HOST_MONGO', 'localhost')
CLIENT = MongoClient('{}:27017'.format(host))
DB = CLIENT['dbplots']

# Connected to websocket.connect
def ws_connect(message, code=None, plot=None):
    message.reply_channel.send({'accept': True})
    if plot == 'main':
        Group('main').add(message.reply_channel)
        print('New main connection')
    else:
        pk = message.content['query_string'].decode().split('=')[1]
        Group('{}_{}'.format(pk, plot)).add(message.reply_channel)
        print('New connection from: {}, Group: {}_{}'.format(message.content['client'][0], pk, plot))

def ws_message(message, code, plot):
    # Accept the incoming connection
    dt = datetime.strptime(str(json.loads(message.content['text'])['date']), '%d/%m/%Y')
    exp = DB.exp_meta.find_one({'code': int(code), 'date': dt})
    
    if exp and plot in exp['plots']:
        if plot == 'spc':
            datas = DB.exp_data.find({'expmeta': exp['_id']}, ['time', 'data']).sort('time', -1).limit(1)[0]
            exp['time'] = [datas['time']]
            exp['spc'] = datas['data']['spc']
            exp['rti'] = datas['data']['rti']
            exp['noise'] = datas['data']['noise']
        else:
            datas = DB.exp_data.find({'expmeta': exp['_id']}, ['time', 'data']).sort('time', 1)
            dum = [(d['time'], d['data'][plot]) for d in datas]
            exp['time'] = [d[0] for d in dum]
            dum = [d[1] for d in dum]
            exp[plot] = [t for t in map(list, zip(*dum))]
        print([datetime.fromtimestamp(t) for t in exp['time']])
        exp.pop('date', None)
        exp.pop('_id', None)
        message.reply_channel.send({'text': json.dumps(exp)})
    else:
        message.reply_channel.send({'text': json.dumps({'interval': 0})})

# Connected to websocket.disconnect
def ws_disconnect(message, code, plot):
    Group('{}_{}'.format(code, plot)).discard(message.reply_channel)
