"""What's on tap?!

Get up to date information on what's in stock at The Robot Arms!
"""
___title___        = "beer"
___license___      = "MIT"
___dependencies___ = ["app", "sleep", "wifi", "http", "ugfx_helper"]
___categories___   = ["EMF"]

import wifi, ugfx, http, ujson, app, sleep
from tilda import Buttons, LED

orientation = 270

def get_beer():
    global bar, stock

    LED(LED.RED).on()
    try:
        bar_json = http.get("https://bar.emf.camp/location/Bar.json").raise_for_status().content
        stock_json = http.get("https://bar.emf.camp/stock.json").raise_for_status().content
        bar = ujson.loads(bar_json)
        stock = ujson.loads(stock_json)
    except: 
        print('oh poop')

    LED(LED.RED).off()
    draw_screen()

def draw_screen():
    global bar, stock

    ugfx.clear(ugfx.BLACK)
    ugfx.text(65, 5, "what's on tap?", ugfx.RED)
    ugfx.line(5, 20, ugfx.width(), 20, ugfx.GREY)

    for idx, beer in enumerate(bar['location']):

        remaining = 0

        for item in stock['stock']:
            if item['description'] == beer['description']:
                remaining = float(item['remaining'])

        ugfx.text(5, 22 + idx*15, beer['description'][:28], ugfx.WHITE)
        ugfx.text(202, 22 + idx*15, '!' if (remaining < 30) else ' ', ugfx.RED)
        ugfx.text(210, 22 + idx*15, "{:>4}".format(beer['price']), ugfx.WHITE)

def toggle_orientation():

    global orientation
    if orientation == 90:
        ugfx.orientation(270)
        orientation = 270
        draw_screen()
    else:
        ugfx.orientation(90)
        orientation = 90
        draw_screen()

ugfx.init()
ugfx.clear(ugfx.BLACK)
ugfx.set_default_font(ugfx.FONT_FIXED)

s=ugfx.Style()
s.set_enabled([ugfx.WHITE, ugfx.BLACK, ugfx.BLACK, ugfx.GREY])
s.set_background(ugfx.BLACK)
ugfx.set_default_style(s)

Buttons.enable_interrupt(Buttons.BTN_A, lambda button_id:get_beer(), on_press=True, on_release=False)
Buttons.enable_interrupt(Buttons.BTN_B, lambda button_id:toggle_orientation(), on_press=True, on_release=False)
Buttons.enable_interrupt(Buttons.BTN_Menu, lambda button_id:app.restart_to_default(), on_press=True, on_release=False)

ugfx.text(5, 10, "Instructions:", ugfx.WHITE)
ugfx.text(5, 30, "Press the A button to refresh", ugfx.WHITE)
ugfx.text(5, 45, "Press the B button to rotate", ugfx.WHITE)
ugfx.text(5, 60, "Press the Menu button to exit", ugfx.WHITE)
ugfx.text(5, 90, "!", ugfx.RED)
ugfx.text(15, 90, "means the stock is low", ugfx.WHITE)
ugfx.text(5, 120, "Loading data from the bar...", ugfx.WHITE)


get_beer()

while True:
    sleep.wfi()

ugfx.clear()
app.restart_to_default()