// This file is part of Desktop App Toolkit,
// a set of libraries for developing nice desktop applications.
//
// For license and copyright information please follow this link:
// https://github.com/desktop-app/legal/blob/master/LEGAL
//
#include "spellcheck/third_party/language_cld3.h"

#include "nnet_language_identifier.h"

namespace Platform::Language {

LanguageId Recognize(QStringView text) {
	using chrome_lang_id::NNetLanguageIdentifier;

	constexpr auto kMinNumBytes = 0;
	constexpr auto kMaxNumBytes = 1000;
	constexpr auto kMaxLangs = 3;

	auto lang_id = NNetLanguageIdentifier(kMinNumBytes, kMaxNumBytes);
	const auto string = text.toUtf8().toStdString();
	const auto results = lang_id.FindTopNMostFreqLangs(string, kMaxLangs);

	auto maxRatio = 0.;
	auto final = NNetLanguageIdentifier::Result();
	for (const auto &result : results) {
		const auto ratio = result.probability * result.proportion;
		if (ratio > maxRatio) {
			maxRatio = ratio;
			final = result;
		}
	}
	if (final.language == NNetLanguageIdentifier::kUnknown) {
		return {};
	}
	return { QLocale(QString::fromStdString(final.language)).language() };
}

} // namespace Platform::Language
