//
// Copyright (C) 2017 Privacore ApS - https://www.privacore.com
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU Affero General Public License as
// published by the Free Software Foundation, either version 3 of the
// License, or (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
// GNU Affero General Public License for more details.
//
// You should have received a copy of the GNU Affero General Public License
// along with this program.  If not, see <http://www.gnu.org/licenses/>.
//
// License TL;DR: If you change this file, you must publish your changes.
//
#ifndef FXCHECKSPAM_H_
#define FXCHECKSPAM_H_

#include <inttypes.h>
#include <stddef.h>
#include <string>
#include "FxTermCheckList.h"

class CheckSpam {
public:
	CheckSpam(XmlDoc *xd, bool debug=false);
	~CheckSpam();

	bool init();
	bool isDocSpam();
	int32_t getScore();
	int32_t getNumUniqueMatchedWords();
	int32_t getNumUniqueMatchedPhrases();
	int32_t getNumWordsChecked();
	bool hasEmptyDocumentBody();
	const char *getReason();
	const char *getDebugInfo();

private:
	Url *m_url;
	Xml *m_xml;
	Words *m_words;
	Phrases *m_phrases;

	char *m_debbuf;
	int m_debbufUsed;
	int m_debbufSize;

	std::string m_reason;
	int32_t m_docMatchScore;
	int32_t m_numUniqueMatchedWords;
	int32_t m_numUniqueMatchedPhrases;
	int32_t m_numWordsChecked;
	bool m_emptyDocumentBody;
	bool m_resultValid;
	bool m_result;
};

extern TermCheckList g_checkSpamList;


#endif