#include "gui.h"
#include "nokia.h"
#include <freertos/FreeRTOS.h>
#include <freertos/task.h>

static void gui_thread(void *arg);

TaskHandle_t hGuiThread = NULL;

void gui_init() {
    printf("GUI init\n");
    LCD_setup();

    LCD_clearDisplay(0);
    LCD_setStr("Hello World", 0, 0, 1);
    LCD_updateDisplay();

    int rv = xTaskCreate(gui_thread, "gui", 4096, NULL, 6, &hGuiThread);
    assert (rv == pdPASS);
}

static void __attribute__((noreturn)) gui_thread(void *arg) {
    uint32_t pos = 20;
#define NMAX 60
    while (1) {
        uint32_t value;
        xTaskNotifyWait(0, ULONG_MAX, &value, portMAX_DELAY);
        printf("Knob event 0x%02x  ", value);

        if (value & 0b1000) {
            printf("PUSH ");
        }
        if (value &  0b100) {
            printf("RELS ");
        }

        if ((value & 0b11) == 0b11) {
            printf("BNCE ");
        } else {
            if (value & 0b01) {
                printf("FWD  ");
                if (pos == NMAX) {
                    pos = 0;
                }
                else {
                    pos += 1;
                }
            }
            if (value & 0b10) {
                printf("BACK ");
                if (pos == 0) {
                    pos = NMAX;
                }
                else {
                    pos--;
                }
            }
        }

        printf(">");
        for (int i=0; i<pos; i++) {
            printf(" ");
        }
        printf("#");
        for (int i=pos; i<NMAX; i++) {
            printf(" ");
        }
        printf("<\n");
    }
}