#pragma once
#include <vector>
#include "common.hpp"
#include "image.hpp"


class Mosaics {
    private:
        typedef struct {
            unsigned dim;
            Image* im;
            rgb_t im_avg;
            rgb_t im_med;
            unsigned char im_avg_dist;
            unsigned char im_med_dist;
        } entry_t;
        std::vector<entry_t> entries;

        void add(Image*, unsigned);

    public:
        ~Mosaics();
        bool add(const Image*);
        const Image* find_best(unsigned dim, rgb_t, unsigned char& dist) const;
        const Image* find_best(const Image*, double& dist) const;
        size_t size() const { return entries.size(); }
};