#pragma once
#include "MadUtility.h"
#include "CCamera.h"
#include <io.h>
#include <stdio.h>

#define MENU_MAIN 1000
#define MENU_PAUSE 2500
#define MENU_GAMEOVER 1500
#define MENU_GOAL  1100
#define MENU_MAP 2000
#define MENU_TIMEOUT 2800
#define MENU_DISPLAY 3000
#define MENU_CAMERA 4000
#define MENU_BALL 5000

#define MENU_CONTROL 6000
#define MENU_TIMER 7000
#define MENU_GRAPHICS 8000
#define MENU_ENV 8500
#define MENU_DEAD 9000

#define ITEM_MAIN_START 1
#define ITEM_MAIN_MAP 2
#define ITEM_MAIN_DISPLAY 3
#define ITEM_MAIN_CAMERA 4
#define ITEM_MAIN_GRAPHICS 5
#define ITEM_MAIN_BALL 6
#define ITEM_MAIN_CONTROL 7
#define ITEM_MAIN_TIMER 8
#define ITEM_GAMEOVER 1
#define ITEM_GOAL 1
#define ITEM_DEAD 1

#define ITEM_EXIT 9

#define ITEM_GRAPHICS_TEXTURED 1
#define ITEM_GRAPHICS_NORMAL 2
#define ITEM_GRAPHICS_WIREFRAME 3 
#define ITEM_GRAPHICS_SOLID 4 
#define ITEM_GRAPHICS_ROBOT 5
#define ITEM_GRAPHICS_NOROBOT 6
#define ITEM_GRAPHICS_ENV 7
#define ITEM_GRAPHICS_BACK 8 
#define ITEM_ENV_DEFAULT 1 
#define ITEM_ENV_METAL 2
#define ITEM_ENV_GLASS 3
#define ITEM_ENV_PLASTIC 4
#define ITEM_ENV_SHINING 5
#define ITEM_ENV_BACK 6
#define ITEM_DISPLAY_W_640x480 1
#define ITEM_DISPLAY_W_800x600 2
#define ITEM_DISPLAY_W_1024x768 3
#define ITEM_DISPLAY_FULLSCREEN 4
#define ITEM_DISPLAY_BACK 5

#define ITEM_CAMERA_FOLLOW  1
#define ITEM_CAMERA_NFOLLOW 2
#define ITEM_CAMERA_BACK 3

#define ITEM_CONTROL_ROLL 1
#define ITEM_CONTROL_LUKE 2

#define ITEM_CONTROL_SNS20 3
#define ITEM_CONTROL_SNS40 4
#define ITEM_CONTROL_SNS60 5
#define ITEM_CONTROL_SNS80 6

#define ITEM_CONTROL_BACK 7

#define ITEM_BALL_METAL 1
#define ITEM_BALL_GLASS 2
#define ITEM_BALL_PLASTIC 3
#define ITEM_BALL_SHINING 4
#define ITEM_BALL_BACK 5

#define ITEM_TIMER_100 1
#define ITEM_TIMER_300 2
#define ITEM_TIMER_600 3
#define ITEM_TIMER_UNLIMITED 4
#define ITEM_TIMER_BACK 5

#define ITEM_MAP 0
#define ITEM_MAP_BACK 9
using namespace vcg;
class CConsole
{
public:
    /**vettore che contiene il nome delle mappe che la console trova nella directory del gioco*/
    string map[100];
    /**vettore che contiene il nome del file che contiene le texture delle sfere*/
    string sphere[100];
    /**numero dei file texture sfere che sono state trovate*/   
    int numsphere;
    /**numero delle mappe che sono state trovate*/
    int nummap;

    /**dimensione X della console*/
    int SizeX;
    /**dimensione Y della console*/
    int SizeY;

    /**numero degli item da visualizzare nel menu corrente*/
    int numitem;
    
    /**nome del file della mappa corrente*/
    char filemap[120];

    /**nome del file della mappa corrente*/

    char filesphere[120];

    /**contiene la stringa dell'item selezionato*/
    char selitem[120];
public:
    CConsole(void);
    ~CConsole(void);
    //===========================DrawBox=========================
    //Disegna nella console un box partendo dalle coordinate (x,y)
    // di dimensione (sizex)X(sizey) di colore nero se sel=true
    // altrimenti  bianco trasparante
    //============================================================
    
    void DrawBox(int x, int y , int sizex, int sizey, bool sel);

    //====================title==============================
    //scrive nel menu come titolo la stringa puntata da t
    //=======================================================
    void title(char *t);
    
    //====================menu===============================
    //Disegna un  menu nella console.
    //type: tipo di menu valori possibili:(MENU_MAIN,MENU_PAUSE,
    //MENU_GAMEOVER,MENU_GOAL,MENU_MAP,MENU_TIMEOUT,MENU_DISPLAY,
    //MENU_CAMERA,MENU_BALL,MENU_CONTROL,MENU_TIMER,MENU_GRAPHICS,
    //MENU_ENV,MENU_DEAD) <br>
    //selpos: posizione nel menu dell'item selezionato
    //=======================================================
    void menu(int type,int selpos);

    //====================item===============================
    //Disegna un item ne menu.                          <br>
    // pos: posizione dell'item nel menu                <br>
    // str: la stringa che viene visualizzata           <br>
    // sel: se true item selezionato altrimenti false   <br>
    //=======================================================
    void item(int pos,char *str,bool sel);
    
    //=================setSize===============================
    //permette di definire le dimensione della console  <br>
    // X: coordinata X                                  <br>
    // Y: coordinata Y                                  <br>
    //=======================================================
    void setSize(int X, int Y);

    //=================printf================================
    //stampa nella console alle coordinta x,y la stringa
    // contenuta in format
    //=======================================================
    void printf(int x, int y, char* format);

    //=================glPrintf==============================
    //stampa una stringa centrata in (x,y).             <br>
    //x,y:   coordinate di stampa                       <br>
    //align: valore di allineamento                     <br>
    //scale: valore di scala                            <br>
    //sel:   booleano che indica che la strina è selezionata    
    // oppure no                                        <br>
    //format...: stringa da stampare formattata         
    //=======================================================
    void glPrintf(GLuint x, GLuint y, int align, GLfloat scale,bool sel,char* format, ...);
    
    //==================ListMap==============================
    //crea la lista delle mappe presenti nella directory. <br>
    //dirPath: directory di ricerca
    //========================================================
    void ListMap(string dirPath);


    //==================ListSphere=====================================
    //crea la lista delle texture sphere presenti nella directory. <br>
    //dirPath: directory di ricerca
    //=================================================================
    void ListSphere(string dirPath);
};