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

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

import de.duehl.basics.io.FileHelper;
import de.duehl.vocabulary.japanese.logic.symbol.kanji.strokes.extract.data.PathWithStrokeNumber;
import de.duehl.vocabulary.japanese.logic.symbol.kanji.strokes.extract.data.PathesWithStrokeNumbers;

/**
 * Diese Klasse extrahiert aus allen SVG-Dateien aus dem Kanji-VG Projekt in einem Verzeichnis
 * die Pfade mit den Strichnummern.
 *
 * 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 AllFilesKanjiVgSvgPathesExtractor {

    /** Das Verzeichnis in dem nach SVG-Dateien gesucht wird. */
    private final String dir;

    /** Die im Verzeichnis gefundenen SVG-Dateien. */
    private List<String> filenames;

    /** Die Liste aller Pfade mit Strichnummern. */
    private List<PathesWithStrokeNumbers> pathesWithStrokeNumbersList;

    /**
     * Konstruktor.
     *
     * @param dir
     *            Das Verzeichnis in dem nach SVG-Dateien gesucht wird.
     */
    public AllFilesKanjiVgSvgPathesExtractor(String dir) {
        this.dir = dir;
    }

    /** Extrahiert aus allen SVG-Dateien im Verzeichnis die  Pfade mit den Strichnummern. */
    public void extract() {
        init();
        determineSvgFiles();
        extractAllFiles();
    }

    private void init() {
        pathesWithStrokeNumbersList = new ArrayList<>();
    }

    private void determineSvgFiles() {
        filenames = FileHelper.findFilesInMainDirectory(dir, ".svg");
    }

    private void extractAllFiles() {
        for (String filename : filenames) {
            extractFile(filename);
        }
    }

    private void extractFile(String filename) {
        KanjiVgSvgPathesExtractor extrator = new KanjiVgSvgPathesExtractor(filename);
        extrator.extract();
        String codePoint = extrator.getCodePoint();
        List<PathWithStrokeNumber> pathes = extrator.getExtractedPathes();
        PathesWithStrokeNumbers pathesWithStrokNumbers = new PathesWithStrokeNumbers(codePoint,
                pathes);
        pathesWithStrokeNumbersList.add(pathesWithStrokNumbers);
    }

    /** Getter für die Liste aller Pfade mit Strichnummern. */
    public List<PathesWithStrokeNumbers> getPathesWithStrokeNumbersList() {
        return pathesWithStrokeNumbersList;
    }

}
