#pragma once

#include "buildingplan.h"
#include "buildingtypekey.h"

#include "modules/Persistence.h"

class DefaultItemFilters {
public:
    static BuildingTypeKey getKey(DFHack::PersistentDataItem &filter_config);

    const BuildingTypeKey key;

    DefaultItemFilters(DFHack::color_ostream &out, BuildingTypeKey key, const std::vector<const df::job_item *> &jitems);
    DefaultItemFilters(DFHack::color_ostream &out, DFHack::PersistentDataItem &filter_config, const std::vector<const df::job_item *> &jitems);

    void setChooseItems(int choose);
    void setItemFilter(DFHack::color_ostream &out, const ItemFilter &filter, int index);
    void setSpecial(const std::string &special, bool val);

    int getChooseItems() const { return choose_items; }
    const std::vector<ItemFilter> & getItemFilters() const { return item_filters; }
    const std::set<std::string> & getSpecials() const { return specials; }

private:
    DFHack::PersistentDataItem filter_config;
    int choose_items;
    std::vector<ItemFilter> item_filters;
    std::set<std::string> specials;
};