
#ifndef TOBJET_H_INCLUDED
#define TOBJET_H_INCLUDED

/*
OBJET       classe d'un objet (pouvant être ramassé par le joueur)

DATE        04/2025

AUTEUR      philippe Thebaud

COMMENTAIRE appliquez toutes les transformations (Blender > menu Objet>Appliquer>Toutes...)
            nettoyez les données (Blender > menu Fichier>Nettoyer>Bloc...)
*/

#include <GL/glew.h>
#include <string>
#include <fstream>
//#include <vector>
//#include <deque>

#include "../ECO/OUtils.h"
#include "../ECO/OTexturelist.h"
#include "../ECO/OMesh_gltf.h"

#include "../ECO/defered/ODshGeo.h"
#include "../ECO/defered/ODshColor.h"
#include "../ECO/shader/OShGlow.h"
//

#include "common.h"
#include "common_objet.h"


class Tobjet
{
public:
	Tobjet();
	~Tobjet();

	void        create(std::string flux);
    void        create(std::ifstream& flux);

	void        draw(ODshGeo& dshGeo);
    void        draw_emissive(OShGlow& shGlow);

    OVec3_f     getBound_min();
    OVec3_f     getBound_max();
    int         getCatalogue_ref();
    std::string getCode();
	std::string getConteneur();
    int         getEmplacement();
    OMesh_gltf& getMesh();
	OMat4&      getModel();
    std::string getObjet3d();
    std::string getPath();
    float       getPoids();
	OVec3_f&    getPos();
    int         getQuantity();
	OVec3_f&    getRot();
	bool        getSelect();
	int         getType();

	void        incQuantity(int nbr);
	void        setQuantity(int nbr);

	void        save(std::ofstream& flux);
	void        setConteneur(std::string conteneur);
	void        setEmplacement(int emplacement);
	void		setPos(OVec3_f& pos);
	void		setRot(OVec3_f& rot);
	void        setSelect(bool mode);
    void        setSelect();

private:

    void        _composition();

	void		_setModel();

private:

    std::string m_code;
	bool        m_cull_face, m_select;
    OVec3_f     m_pos, m_rot;
    float       m_scale;
	OMat4       m_model;

	OVec3_f     m_bound_min, m_bound_max;
	//bool        m_select;

    int         m_idxCatalogue;
    std::string m_conteneur;
    int         m_quantite;
    int         m_emplacement; // EMP_NULL = -1, EMP_TETE, EMP_BRAS_G, EMP_MAIN_D, EMP_CEINTURE, EMP_SAC

public:
    // pour récupérer plus facilement les données lors de l'export
    OMesh_gltf  mesh;
};

#endif
