#pragma once

#include "lns/operators/abstract_operator.h"

class StringRemoval : public DestructionOperator
{
public:
    explicit StringRemoval(unsigned int maxCardinalityOfString, unsigned int averageNumberRemovedElement)
        : maxCardinalityOfString(maxCardinalityOfString), averageNumberRemovedElement(averageNumberRemovedElement)
    {}

    // Each string has a max number of requests: MAX_CARDINALITY_OF_STRING
    // L_max in the paper.
    unsigned int maxCardinalityOfString = 10;
    // This operator will remove in average AVERAGE_CUSTOMER_REMOVAL of requests
    // c with a bar on top in the paper
    unsigned int averageNumberRemovedElement = 10;

    /**
     * This operator removes numberOfPairsToDestroy pairs randomly in the solution.
     */
    void destroySolution(Solution &solution) const override;

private:
    int numberOfPairsToDestroy;
};