#ifndef BACKGROUNDEXTRACTOR_AGGRESSIVE_H
#define BACKGROUNDEXTRACTOR_AGGRESSIVE_H

#include "backgroundextractor.h"
#include <memory>

/**
 * @brief The BackgroundExtractorAggressive class extends BackgroundExtractor with more aggressive background subtraction.
 *
 * This class provides a more aggressive version of the background subtraction process
 * by applying additional processing to the result of the standard background subtraction.
 */
class BackgroundExtractorAggressive : public BackgroundExtractor
{
    public:
        /**
         * @brief Construct a new BackgroundExtractorAggressive object
         */
        BackgroundExtractorAggressive() : BackgroundExtractor() {}

        /**
         * @brief Process an image to remove background gradients more aggressively
         * @param image The input image
         * @return The processed image with background gradients removed more aggressively
         */
        template <typename T>
        std::shared_ptr<ImageBuffer<T>> process(const std::shared_ptr<ImageBuffer<T>> &image);

    public:
        /**
         * @brief Apply additional processing to make background subtraction more aggressive
         * @param image The image after standard background subtraction
         * @return The image with more aggressive background subtraction
         */
        cv::Mat makeMoreAggressive(const cv::Mat &image);
};

// Include the template implementation
#include "backgroundextractor_aggressive.tpp"

#endif // BACKGROUNDEXTRACTOR_AGGRESSIVE_H
