#include "oswald.h"
#include "oswald_watch_faces.h"

#include "oswald_main.h"

/*
 * some variable defining our curent state
 * these are globals in order to avoid having to pass pointers
 * through function calls thus saving stack space
 */
clock_state OswaldClk;
watch_state OswaldState;

void update_screen(void)
{
	switch (OswaldState.screen) {
		case IDLE_SCREEN:
			if (OswaldState.idle_draw_func != NULL)
				OswaldState.idle_draw_func(OswaldState.idle_show_seconds);
			break;
		case APPLICATION_SCREEN:
			break;
		deafault:
			break;
	};
}

void oswald_change_to_screen(screen_number screen)
{
	// we spare the update if no change
	if (OswaldState.screen != screen) {
		OswaldState.screen = screen;
		update_screen();
	}
}

void oswald_set_time(u8t hour, u8t minute, u8t second)
{
	OswaldClk.hour = hour;
	OswaldClk.minute = minute;
	OswaldClk.second = second;
}

static void update_clock_state (void)
{
	OswaldClk.second += 1;
	if (OswaldClk.second > 59) {
		OswaldClk.second = 0;
		OswaldClk.minute += 1;
	} else
		return;
	if (OswaldClk.minute > 59) {
		OswaldClk.minute = 0;
		OswaldClk.hour += 1;
	} else
		return;
	if (OswaldClk.hour > 23) {
		OswaldClk.hour = 0;
		// day++
	} else
		return;
}

void oswald_one_second_tick(void)
{
	update_clock_state();
	update_screen();
}

void oswald_handle_button_press(watch_button button)
{
}

void oswald_init(void)
{
	OswaldState.screen = IDLE_SCREEN;
	OswaldState.idle_draw_func = DrawLcdDigitalClock;
	OswaldState.idle_show_seconds = FALSE;
}