#include <GL/gl.h>
#include <GL/glu.h>
#include "aux.h"

#define GRAD 360

static int year = 0, day = 0, mond1 =0, mond2=0;

void dayAdd (void) { day = (day + 10) % GRAD; }

void daySubtract (void) { day = (day - 10) % GRAD; }

void yearAdd (void) { year = (year + 5) % GRAD; }

void yearSubtract (void) { year = (year - 5) % GRAD; }

void display(void)
{
    glClear(GL_COLOR_BUFFER_BIT);

    glColor3f (1.0, 1.0, 1.0);
    glPushMatrix();
/*	draw sun	*/
    auxWireSphere(1.0);
/*	draw smaller planet	*/
    glRotatef ((GLfloat) year, 0.0, 1.0, 0.0);
    glTranslatef (2.0, 0.0, 0.0);
    glRotatef ((GLfloat) day, 0.0, 1.0, 0.0);
    auxWireSphere(0.2);
    glPushMatrix();
	    glRotatef ((GLfloat) mond1, 0.0, 1.0, 0.0);
	    glTranslatef (0.8, 0.0, 0.0);
	    auxWireSphere(0.03);
    glPopMatrix();
    glPushMatrix();
	    glRotatef ((GLfloat) mond2, 1.0, 0.0, 0.0);
	    glTranslatef (0.0, 0.4, 0.0);
	    auxWireSphere(0.02);
    glPopMatrix();
    glPopMatrix();
    glFlush();
}
void monde(void) { mond1=(mond1+5)%GRAD; mond2=(mond2+4)%GRAD; display(); }

void myinit (void) { glShadeModel (GL_FLAT); }

void myReshape(int w, int h)
{
    glViewport(0, 0, w, h);
    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    gluPerspective(60.0, (GLfloat) w/(GLfloat) h, 1.0, 20.0);
    glMatrixMode(GL_MODELVIEW);
    glLoadIdentity();
    glTranslatef (0.0, 0.0, -5.0);
}

int main(int argc, char** argv)
{
    auxInitDisplayMode (AUX_SINGLE | AUX_RGB);
    auxInitPosition (0, 0, 500, 500);
    auxInitWindow (argv[0]);
    myinit ();
    auxKeyFunc (AUX_LEFT, yearSubtract);
    auxKeyFunc (AUX_RIGHT, yearAdd);
    auxKeyFunc (AUX_UP, dayAdd);
    auxKeyFunc (AUX_DOWN, daySubtract);
    auxIdleFunc ( monde);
    auxReshapeFunc (myReshape);
    auxMainLoop(monde);
}