package de.duehl.vocabulary.japanese.logic.symbol.kanji.strokes.own;

import java.util.ArrayList;
import java.util.List;

import de.duehl.basics.io.FileHelper;
import de.duehl.basics.text.Lines;
import de.duehl.basics.text.NumberString;
import de.duehl.basics.text.Text;
import de.duehl.vocabulary.japanese.logic.symbol.kanji.strokes.own.data.KanjiStrokePath;

/**
 * Diese Klasse liest die ehemals einmalig aus den SVG-Dateien aus dem Kanji-VG Projekt ermittelten
 * Pfade mit den Strichnummern, welcher dann in eine Datei in einem eigenen Format geschrieben
 * wurde, ein.
 *
 *
 * Zu Kanji-VG siehe:
 *
 * https://github.com/KanjiVG/kanjivg
 *
 * KanjiVG is copyright Ulrich Apel and released under the Creative Commons Attribution-Share
 * Alike 3.0 licence: http://creativecommons.org/licenses/by-sa/3.0/
 *
 * The project's documentation is at https://kanjivg.tagaini.net/.
 *
 * @version 1.01     2026-08-18
 * @author Christian Dühl
 */

public class KanjiStrokesReader {

    /** Die eingelesenen Pfade mit den Strichnummern. */
    private List<KanjiStrokePath> kanjiStrokePathes;

    /** Liest die Datei ein. */
    public void read() {
        Lines lines = FileHelper.readFileInJarBesideJavaClassAsLines(this.getClass(),
                "kanji_strokes.txt");
        lines.remove(0); // Titelzeile entfernen.

        kanjiStrokePathes = new ArrayList<>();
        for (String line : lines) {
            List<String> parts = Text.splitByTabulator(line);
            if (parts.size() != 3) {
                throw new RuntimeException("Eine Zeile aus der Datei mit den Pfaden mit "
                        + "Strichnummern der Kanji hat keine drei Teile.\n"
                        + "\t" + "line : " + line + "\n");
            }
            String codePointString = parts.get(0);
            String strokeNumberString = parts.get(1);
            String path = parts.get(2);

            int codePoint = Integer.parseInt(codePointString, 16);
            int strokeNumber = NumberString.parseInt(strokeNumberString);
            KanjiStrokePath kanjiStrokePath = new KanjiStrokePath(codePoint, strokeNumber, path);
            kanjiStrokePathes.add(kanjiStrokePath);
        }
    }

    public List<KanjiStrokePath> getKanjiStrokePathes() {
        return kanjiStrokePathes;
    }

}
