/**
 * auteurs          : Michel Landschoot
 * mail             : direction@landsnet.com
 * date de création : 2013-12-21
 * description      : classe décrivant une image dans une hiérachie de figures
 */

#ifndef IMAGE_H
#define IMAGE_H
#include <list>
#include "figure.hpp"

/**
 * Politique uniforme d'allocation mémoire
 * Toutes les figures sont allouées dynamiquement
 * Une image les mémorise via un tableau de pointeurs de figures
 */
class Image : public Figure
{

public:
    enum {IMAGE_MAX = 50};

    static Image temoin;

    Image (const Point & a = Point(0,0)) : _origine(a), _nombre(0) { }

    Image(const Image & image);

    virtual Figure * copy();

    virtual ~Image()
    {
        list<Figure *>::iterator it(_figures.begin());
        list<Figure *>::const_iterator end(_figures.end());

        while(it != end)
        {
            it = _figures.erase(it);
            ++it;
        }
    }

    Figure * getFigure(int index) const;

    int getNombre() const
    {
        return _nombre;
    }

    Point getOrigine() const
    {
        return _origine;
    }

    void ajouter(const Figure & f);

    virtual void deplacer(const Point & trans);
    virtual void dessiner(ostream & os = cout) const;
    virtual double surface() const;
    virtual void afficher(ostream & os = cout) const;
private:
    /**
     * Origine de la figure
     */
    Point _origine;
    /**
     * Conteneur de figures allouées dynamiquement
     */
    list<Figure *> _figures;
    /**
     * Nombre de figures dans une image
     */
    int _nombre;
};
#endif
