#ifndef RES_WRITER_HPP
#define RES_WRITER_HPP

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

#include <stdio.h>
#include <string>
#include <vector>


namespace USpeedGameEngine
{

class ResWriter
{
    // Les variables
    public:
    protected:
    private:
        /**
         * Structure de stockage de la clé et du nom de fichier
         */
        struct KeyFilename
        {
            std::string key;                            //!< La clé référençant les données
            std::string filename;                       //!< Le nom du fichier contenant les données
        };
        FILE *file;                                     //!< Le fichier de ressources en cours d'écriture ou pointeur nul
        std::vector<struct KeyFilename> filenames;      //!< La liste des clés/fichiers à traiter lors du "persist()"
        std::string password;                           //!< Le mot de passe de décryptage (ou vide si pas de mot de passe)
        unsigned int blockSize;                         //!< La taille d'un bloc de données brutes (entre 1Ko et 50Ko). Taille par défaut : 4Ko

    // Les fonctions
    public:
        // Constructeur par défaut
        ResWriter();
        // Constructeur avec valorisation de la taille des blocs
        ResWriter(unsigned int dataBlockSize);
        // Destructeur par défaut
        ~ResWriter();
        // Définit la taille des blocs de données.
        void setBlockSize(unsigned int dataBlockSize);
        // Retourne la taille des blocs de données.
        unsigned int getBlockSize();
        // Ouvre le fichier spécifié et charge l'index
        bool open(std::string const &filename);
        bool open(std::string const &filename, std::string const &pwd);
        // Ferme le fichier ouvert
        void close();

        // Ajouter un fichier dans la file d'attente de traitement
        bool add(std::string const &key, std::string const &filename);
        // Écrit effectivement en tant que ressource les fichiers en file d'attente et crée l'index puis ferme le fichier
        bool persist();
        bool persist(bool cPrint);
        // Lit l'intégralité d'un fichier et le place dans le tampon fourni
        static bool getFileContent(std::string const &filename, std::string &content);
    protected:
    private:
};

}        // Fin "namespace USpeedGameEngine"

#endif
