#include <math.h>

#include "oswald.h"
#include "oswald_main.h"
#include "oswald-ui.h"
#include "Fonts.h"
#include "LcdDisplay.h"

#include "oswald_watch_faces.h"

void DrawLcdAnaClock(boolean show_seconds)
{
	unsigned char *bbuf;
	char daystr[5];
	int len;
	register i, x, y, x2, y2;
	double tmp, mf;
	s8t hour, minute, seconds;

	hour = OswaldClk.hour;
	minute = OswaldClk.minute;
	seconds = OswaldClk.second;

	hour -= 3;
	mf = (1. / 59.) * (double)minute;
	minute -= 15;
	seconds -= 15;

	lcd_clear_display();

	// plot(R*cos(360° * i/N), R*sin(360° * i/N))
	for (i=0; i<12; i++) {
		tmp = 48. + (43. * cos(((2. * M_PI) / 12.) * (double)i));
		x =  tmp;
		tmp = 48 + (43. * sin(((2. * M_PI) / 12.) * (double)i));
		y =  tmp;
		tmp = 48. + (48. * cos(((2. * M_PI) / 12.) * (double)i));
		x2 =  tmp;
		tmp = 48 + (48. * sin(((2. * M_PI) / 12.) * (double)i));
		y2 =  tmp;
		DrawLcdLineBresenhamWW(x, y, x2, y2, 2);
	};
	// Hour
	tmp = 48. + (30. * cos(((2. * M_PI) / 12.) * ((double)hour + mf)));
	x =  tmp;
	tmp = 48 + (30. * sin(((2. * M_PI) / 12.) * ((double)hour + mf)));
	y =  tmp;
	DrawLcdLineBresenhamWW(48, 48, x, y, 2);
	// Minute
	tmp = 48. + (40. * cos(((2. * M_PI) / 60.) * (double)minute));
	x =  tmp;
	tmp = 48 + (40. * sin(((2. * M_PI) / 60.) * (double)minute));
	y =  tmp;
	DrawLcdLineBresenhamWW(48, 48, x, y, 2);
	if (show_seconds) {
		// Seconds
		tmp = 48. + (40. * cos(((2. * M_PI) / 60.) * (double)seconds));
		x =  tmp;
		tmp = 48 + (40. * sin(((2. * M_PI) / 60.) * (double)seconds));
		y =  tmp;
		DrawLcdLineBresenham(48, 48, x, y);
	};

	//snprintf(daystr, 5, "%d", day);
	// mw_buf_print(mwbuf, 74, 45, daystr, 0, MW_WHITE, MW_BLACK);
}

void DrawLcdDigitalClock(boolean show_seconds)
{
	gint gRow = 3;
	gint gColumn = 4;

	SetFont(MetaWatchTime);

	lcd_clear_display();
	//gRow += WriteLcdCharacter(ui, gRow, gColumn, TIME_CHARACTER_SPACE_INDEX);
	gRow += WriteLcdCharacter(gRow, gColumn, (OswaldClk.hour / 10));
	gRow += WriteLcdCharacter(gRow, gColumn, (OswaldClk.hour % 10));
	gRow += WriteLcdCharacter(gRow, gColumn, TIME_CHARACTER_COLON_INDEX);
	gRow += WriteLcdCharacter(gRow, gColumn, (OswaldClk.minute / 10));
	gRow += WriteLcdCharacter(gRow, gColumn, (OswaldClk.minute % 10));
	if (show_seconds) {
		gRow += WriteLcdCharacter(gRow, gColumn, TIME_CHARACTER_COLON_INDEX);
		gRow += WriteLcdCharacter(gRow, gColumn, (OswaldClk.second / 10));
		gRow += WriteLcdCharacter(gRow, gColumn, (OswaldClk.second % 10));
	};
}