package de.duehl.vocabulary.japanese.ui.dialog.kanji.kanjiset.check;

import java.awt.Component;
import java.awt.Point;
import java.util.List;

import de.duehl.basics.text.Text;
import de.duehl.swing.ui.GuiTools;
import de.duehl.vocabulary.japanese.data.KanjiSet;
import de.duehl.vocabulary.japanese.logic.symbol.kanji.set.KanjiSetsChecker;
import de.duehl.vocabulary.japanese.ui.tools.VocabularyTrainerUiTools;

/**
 * Diese Klasse prüft die Kanji-Mengen auf Integrität.
 *
 * @version 1.01     2026-03-18
 * @author Christian Dühl
 */

public class KanjiSetIntegrityChecker {

    /**
     * Überprüft die Integrität der Kanji-Mengen.
     *
     * Bei einer erfolgreichen Überprüfung wird nichts angezeigt.
     *
     * @param kanjiSets
     *            Die Liste der benutzerdefinierten Kanji-Mengen.
     * @param parentComponent
     *            Die Komponente der aufrufenden Gui-Klasse.
     * @param parentLocation
     *            Die Position der aufrufenden Gui-Klasse.
     */
    public static void checkKanjiSetsIntegrity(List<KanjiSet> kanjiSets, Component parentComponent,
            Point parentLocation) {
        boolean showSuccessToo = false;
        checkKanjiSetsIntegrity(kanjiSets, parentComponent, parentLocation, showSuccessToo);
    }

    /**
     * Überprüft die Integrität der Kanji-Mengen.
     *
     * Bei einer erfolgreichen Überprüfung wird ein Hinweis angezeigt.
     *
     * @param kanjiSets
     *            Die Liste der benutzerdefinierten Kanji-Mengen.
     * @param parentComponent
     *            Die Komponente der aufrufenden Gui-Klasse.
     * @param parentLocation
     *            Die Position der aufrufenden Gui-Klasse.
     */
    public static void checkKanjiSetsIntegrityWithSuccessInfo(List<KanjiSet> kanjiSets,
            Component parentComponent, Point parentLocation) {
        boolean showSuccessToo = true;
        checkKanjiSetsIntegrity(kanjiSets, parentComponent, parentLocation, showSuccessToo);
    }

    /**
     * Überprüft die Integrität der Kanji-Mengen.
     *
     * @param kanjiSets
     *            Die Liste der benutzerdefinierten Kanji-Mengen.
     * @param parentComponent
     *            Die Komponente der aufrufenden Gui-Klasse.
     * @param parentLocation
     *            Die Position der aufrufenden Gui-Klasse.
     * @param showSuccessToo
     *            Gibt an, ob auch auf eine erfolgreiche Prüfung hingewiesen werden soll.
     */
    private static void checkKanjiSetsIntegrity(List<KanjiSet> kanjiSets, Component parentComponent,
            Point parentLocation, boolean showSuccessToo) {
        KanjiSetsChecker checker = new KanjiSetsChecker(kanjiSets);
        checker.check();
        List<String> warningStrings = checker.getWarningStrings();
        if (warningStrings.isEmpty()) {
            if (showSuccessToo) {
                GuiTools.informUser(parentComponent, "Keine Warnungen",
                        "Bei der Überprüfung der Kanjimengen sind keine Warnungen aufgetreten.");
            }
        }
        else {
            String title = "Warnungen bei der Überprüfung der Kanjimengen";
            String text = Text.join("\n\n", warningStrings);
            VocabularyTrainerUiTools.viewTextFile(title, text, parentLocation);
        }
    }

}
