from flask import Blueprint, render_template, request, jsonify
from time import gmtime, strftime
from mydatabase import *
from draw import *
import redis
import time
import json

packet_api = Blueprint('packet_api', __name__)

@packet_api.route('/packet/', methods=['GET','POST'])
def packet():
    block = 'none'
    return render_template('packet.html', block=block)

@packet_api.route('/refreshpacket/', methods=['GET','POST'])
def refreshpacket():
    r = redis.Redis(host='127.0.0.1', port='6379')
    data = '<svg id="svg1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="1800" height="1420">'

    # use the number of ports drawn on boxes to determine switch box display size - this should grow as more boxen are added
    cp = int(r.get("packetConPorts"))
    pp = int(r.get("packetProdPorts"))

    if pp > cp:
       max = pp
    else:
       max = cp

    max = max * 38
    if max < 500: 
        max = 500

    SPACE = 14           # pixel space between boxes
    SWITCHSIZE = max
    x = 210              # starting X (across) andy (down) for heading text
    y = 18

    # draw header text
    data = data + headerText(x, y, 'Packet Broker')

    # start here. determine where the mid should based on the total number of ports and back up from there
    m = r.get("packetProdPorts")
    mid = int(m)*32
    y = SWITCHSIZE/2 - mid/2

    # draw switch
    data = data + drawSwitchBox('black','eeeeee', 800, 10, SWITCHSIZE)

    # get total number of boxes so we can draw the ones for this screen
    count = int(getRedisCount()) + 1

    # draw producers
    for key in range(1, count):
        serverData = getRedis(key)
        if serverData != None:
           if serverData['type'].lower() == 'producer':
              if serverData['location'].lower() == 'packet':
                 datablock = json.dumps(serverData)
                 data = data + drawProducer(datablock, x, y)
                 y = y + len(serverData['ports'])*32 + SPACE   # draw space between boxes

    # reposition to draw consumers, start from the top for consumers
    x = 1308
    y = 18

    # draw consumers
    for key in range(1, count):
        serverData = getRedis(key)
        if serverData != None:
           if serverData['type'].lower() == 'consumer':
              if serverData['location'].lower() == 'packet':
                 datablock = json.dumps(serverData)
                 data = data + drawConsumer(datablock, x, y)
                 y = y + len(serverData['ports'])*32 + SPACE   # draw space between boxes

    data = data + '</svg>'
    return data



