// resource_loader.hpp - Carregador de recursos (Singleton)
// © 2025 Port a C++20 amb SDL3
// Coordina càrrega des del paquet i/o sistema de fitxers

#pragma once

#include <memory>
#include <string>
#include <vector>

#include "resource_pack.hpp"

namespace Resource {

// Singleton per gestionar la càrrega de recursos
class Loader {
    public:
        // Singleton
        static Loader& get();

        // Inicialització
        bool initialize(const std::string& pack_file, bool enable_fallback);

        // Càrrega de recursos
        std::vector<uint8_t> loadResource(const std::string& filename);
        bool resourceExists(const std::string& filename);

        // Validació
        bool validatePack();
        [[nodiscard]] bool isPackLoaded() const;

        // Estat
        void setBasePath(const std::string& path);
        [[nodiscard]] std::string getBasePath() const;

        // No es pot copiar ni moure
        Loader(const Loader&) = delete;
        Loader& operator=(const Loader&) = delete;

    private:
        Loader() = default;
        ~Loader() = default;

        // Dades
        std::unique_ptr<Pack> pack_;
        bool fallback_enabled_ = false;
        std::string base_path_;

        // Funcions auxiliars
        std::vector<uint8_t> loadFromFilesystem(const std::string& filename);
};

}  // namespace Resource
