package de.duehl.vocabulary.japanese.startup.logic.steps;

import java.util.List;

import de.duehl.basics.datetime.time.watch.StopWatch;
import de.duehl.vocabulary.japanese.common.persistence.Options;
import de.duehl.vocabulary.japanese.data.KanjiSet;
import de.duehl.vocabulary.japanese.io.AllKanjiSetsReader;
import de.duehl.vocabulary.japanese.logic.symbol.kanji.set.KanjiSetsChecker;
import de.duehl.vocabulary.japanese.startup.ui.data.SplashScreenable;

/**
 * Diese Klasse steht für den Schritt zum Einlesen Kanji-Mengen beim Startup des Vokabeltrainers.
 *
 * @version 1.01     2026-03-18
 * @author Christian Dühl
 */

public class Step13LoadKanjiSets extends StartupStep {

    /** Die Liste der benutzerdefinierten Kanji-Mengen. */
    private List<KanjiSet> kanjiSets;

    /**
     * Konstruktor.
     *
     * @param step
     *            Der Schritt der durchgeführt wird.
     * @param options
     *            Die Programmoptionen.
     * @param splashScreen
     *            Die grafische Oberfläche beim Start in der die Meldungen angezeigt werden.
     * @param watch
     *            Misst die Laufzeit des gesamten Startups.
     */
    public Step13LoadKanjiSets(String step, Options options, SplashScreenable splashScreen,
            StopWatch watch) {
        super(step, options, splashScreen, watch);
    }

    /** Führt den eigentlichen Inhalt des Schritts aus. */
    @Override
    protected void runInternalStep() {
        loadKanjiSets();

        // Durch den Editor kann eigentlich kein Kanji mehrfach in der gleichen Kanji-Menge sein.
        // Daher prüfe ich das hier nicht.

        checkIfKanjiAreInMultipleKanjiSetsOfSameGroup();
    }

    private void loadKanjiSets() {
        appendMessage("Lade die benutzerdefinierten Kanji-Mengen ...");
        kanjiSets = AllKanjiSetsReader.read();
    }

    private void checkIfKanjiAreInMultipleKanjiSetsOfSameGroup() {
        KanjiSetsChecker checker = new KanjiSetsChecker(kanjiSets);
        checker.check();
        for (String warningString : checker.getWarningStrings()) {
            appendMessage(warningString);
            warningsInStep(warningString);
        }
    }

    /** Getter für die Liste der benutzerdefinierten Kanji-Mengen. */
    public List<KanjiSet> getKanjiSets() {
        return kanjiSets;
    }

}
