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

import java.util.List;

import de.duehl.basics.io.Charset;
import de.duehl.basics.io.FileHelper;
import de.duehl.basics.io.FineFileWriter;
import de.duehl.basics.io.Writer;
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 liest einmalig die SVG-Dateien aus dem Kanji-VG Projekt ein und erstellt eine
 * einfachere Datei mit allen benötigten daraus extrahierten Pfade.
 *
 *
 * 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 OneTimeKanjiVgSvgFilesWorker {

    /** Das Verzeichnis in dem die SVG-Dateien aus dem Kanji-VG Projekt liegen. */
    private final String dir;

    /**
     * Der Name der Datei in der die Pfade in der eigenen, einfacheren Struktur gespeichert werden.
     */
    private final String outputFilename;

    /** Die aus den SVG-Dateien extrahierten Pfade. */
    private List<PathesWithStrokeNumbers> pathesWithStrokeNumbersList;

    /** Schreibt die Datei im eigenen Format. */
    private Writer writer;

    /**
     * Konstruktor.
     *
     * @param dir
     *            Das Verzeichnis in dem die SVG-Dateien aus dem Kanji-VG Projekt liegen.
     */
    public OneTimeKanjiVgSvgFilesWorker(String dir) {
        this.dir = dir;

        outputFilename = FileHelper.concatPathes(FileHelper.getDirName(dir), "kanji_strokes.txt");
        System.out.println("Ergebnisdatei: " + outputFilename);
    }

    public void work() {
        analyseKaniVgFiles();
        openOutputFile();
        workOnPathes();
        closeOutputFile();
    }

    private void analyseKaniVgFiles() {
        AllFilesKanjiVgSvgPathesExtractor extractor = new AllFilesKanjiVgSvgPathesExtractor(dir);
        extractor.extract();
        pathesWithStrokeNumbersList = extractor.getPathesWithStrokeNumbersList();
    }

    private void openOutputFile() {
        writer = new FineFileWriter(outputFilename, Charset.UTF_8);
        writer.writeln("code-point" + "\t" + "stoke-number" + "\t" + "path");
    }

    private void workOnPathes() {
        for (PathesWithStrokeNumbers pathesWithStrokeNumbers : pathesWithStrokeNumbersList) {
            String codePoint = pathesWithStrokeNumbers.getCodePoint();
            int strokeNumber = 0;
            for (PathWithStrokeNumber path : pathesWithStrokeNumbers.getPathes()) {
                ++strokeNumber;
                String pathStrokeNumber = path.getStrokeNumber();
                if (!pathStrokeNumber.equals("s" + strokeNumber)) {
                    System.out.println(codePoint + " Abweichung - " + pathStrokeNumber + " <-> "
                            + strokeNumber);
                }
                writer.writeln(codePoint + "\t" + strokeNumber + "\t" + path.getPath());
            }
        }
    }

    private void closeOutputFile() {
        writer.close();
    }

    public static void main(String[] args) {
        String dir = "c:\\TEMP\\kanjivg\\kanji";
        OneTimeKanjiVgSvgFilesWorker worker = new OneTimeKanjiVgSvgFilesWorker(dir);
        worker.work();
    }

}
