#include "console.h"

enum {
    MENU_AUTO_CALIB,
    MENU_CALIBRATE,
    MENU_TOUCH_DETECT,
    MENU_AIR_WHEEL,
    MENU_QUIT,
    MENU_SIZE
};

#define ACTION_INVOKE 0
#define ACTION_INCREASE 1
#define ACTION_DECREASE 2

int demo_status = 0;

void gotoxy(int x, int y)
{
    COORD coords = { x, y };
    SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), coords);
}

void action(data_t *data, int action)
{
    switch(data->menu_current)
    {
        case MENU_AUTO_CALIB:
            switch_auto_calib(data);
            break;
        case MENU_CALIBRATE:
            if(action == ACTION_INVOKE)
                calibrate_now(data);
            break;
        case MENU_TOUCH_DETECT:
			switch (action) {
			case ACTION_INCREASE:
				demo_status++;
				if (demo_status > 2)
					demo_status = 2;
				break;
			case ACTION_DECREASE:
				demo_status--;
				if (demo_status < 0)
					demo_status = 0;
				break;
			}
			switch_touch_detect(demo_status);
            break;
        case MENU_AIR_WHEEL:
            switch_air_wheel(data);
            break;
        case MENU_QUIT:
            if(action == ACTION_INVOKE)
                data->running = 0;
            break;
    }
}

void update_menu(data_t *data)
{
    int redraw = 0;

    if(data->menu_current < 0) {
        data->menu_current = 0;
        redraw = 1;
    }

    if(_kbhit())
    {
        redraw = 1;
        switch(_getch())
        {
        case 0x0D:
            action(data, ACTION_INVOKE);
            break;
        case 0xE0:
            switch(_getch())
            {
            case 0x48: // Up Arrow
                data->menu_current =
                        (MENU_SIZE + data->menu_current - 1) % MENU_SIZE;
                break;
            case 0x50: // Down Arrow
                data->menu_current = (data->menu_current + 1) % MENU_SIZE;
                break;
            case 0x4b: // Left Arrow
                action(data, ACTION_DECREASE);
                break;
            case 0x4d: // Right Arrow
                action(data, ACTION_INCREASE);
                break;
            }
            break;
        }
        while(_kbhit())
            _getch();
    }

    if(redraw)
    {
        gotoxy(0, 10);
        printf("%c Kalibracija:      %s\n",
               data->menu_current == MENU_AUTO_CALIB ? '>' : ' ',
               data->auto_calib ? "Samodejno" : "Rocno    ");
        printf("%c Kalibriraj zdaj\n",
               data->menu_current == MENU_CALIBRATE ? '>' : ' ');
        printf("%c Demo nacno:       ",
               data->menu_current == MENU_TOUCH_DETECT ? '>' : ' ');
		switch (demo_status) {
		case 0:
			printf("Besedilni nacin \n");
			break;
		case 1:
			printf("VLC media player\n");
			break;
		case 2:
			printf("Acrobat reader  \n");
			break;
		}
        printf("%c Zracno kolo:      %s\n",
               data->menu_current == MENU_AIR_WHEEL ? '>' : ' ',
               data->air_wheel ? "DA " : "NE");
        printf("%c Izhod\n",
               data->menu_current == MENU_QUIT ? '>' : ' ');
    }
}
