#ifndef FOLDER_HPP
#define FOLDER_HPP

// Détection du système cible...
#include "usgeDetectSystem.h"

// C++
#include <string>

#ifdef TARGET_SYSTEM_PSP
    #include <dirent.h>
#elif defined TARGET_SYSTEM_WIN32
    #include <windows.h>
#endif


namespace USpeedGameEngine
{

class Folder
{
    /****************
    * Les attributs *
    ****************/
    public :
    protected :
    private :
        #ifdef TARGET_SYSTEM_PSP
            DIR *folder;                    //!< Pointeur du répertoire courant
            struct dirent *folderContent;   //!< Structure pour le contenu du répertoire
        #elif defined TARGET_SYSTEM_WIN32
            HANDLE folder;                  //!< Pointeur du répertoire courant
            WIN32_FIND_DATA folderContent;  //!< Structure pour le contenu du répertoire
            bool hasFolderContent;          //!< Permet de savoir si la variable "folderContent" est valide
            bool firstCall;                 //!< Permet de savoir si on demande le prochain élément du répertoire pour la première fois ou pas
        #endif

        std::string extension;              //!< L'extension de l'élément courant
        std::string buffer;                 //!< Tampon temporaire pour retourner certaines informations
        std::string openedFolder;           //!< Dossier courant

    /***************
    * Les méthodes *
    ***************/
    public :
        // Constructeur par défault
        Folder();
        // Destructeur par défault
        ~Folder();

        // Sélectionne l'élément du répertoire courant et retourne "true" si on a réussi à le sélectionner
        bool nextElement();
        // Ouverture (pointer vers) le répertoire spécifié
        bool open(const char *myFolder);
        // Crée un répertoire
        bool createFolder(const char *myFolder);
        // Libération de la mémoire
        void reset();

        // Retourne le type de l'élément courant
        bool getType();
        // Retourne le nom de l'élément courant
        const char *getName();
        // Retourne le nom complet de l'élément courant
        const char *getFullname();
        // Retourne la taille de l'élément courant
        unsigned long int getSize();
        // Retourne l'extension de l'élément courant
        const char *getExtension();

    protected :
    private :
};

}

#endif
