package de.duehl.vocabulary.japanese.ui.dialog.kanji.stroke;

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

import de.duehl.swing.ui.GuiTools;
import de.duehl.swing.ui.dialogs.PanelDialog;
import de.duehl.vocabulary.japanese.logic.symbol.kanji.strokes.own.data.KanjiStrokePath;
import de.duehl.vocabulary.japanese.logic.symbol.kanji.strokes.own.data.KanjiStrokes;

/**
 * Diese Klasse stellt Hilfsmethoden rund um die Darstellung der Strichfolgen von Kanji zur
 * Verfügung.
 *
 * @version 1.01     2026-08-20
 * @author Christian Dühl
 */

public class KanjiStrokesUiTools {

    private static final Dimension KANJI_STROKES_DIALOG_DIMENSION = new Dimension(750, 800);
    private static final int KANJI_STROKES_DIALOG_BORDER_WIDTH = 10;


    /**
     * Zeigt die Strichfolgen eines Kanji an.
     *
     * Manchmal weicht parentLocation tatsächlich von callingComponent.getLocation() ab, daher wird
     * beides benötigt.
     *
     * @param kanji
     *            Das anzuzeigende Kanji als einzelnes Zeichen.
     * @param kanjiStrokes
     *            Die Datenstruktur mit den Strichen der Kanji für die Darstellung in der
     *            grafischen Oberfläche.
     * @param parentLocation
     *            Die Position des aufrufenden Dialogs.
     * @param programImage
     *            Das Icon für das Programm.
     */
    public static void showKanjiStrokes(String kanji, KanjiStrokes kanjiStrokes,
            Component callingComponent, Point parentLocation, Image programImage) {
        if (kanjiStrokes.knowsPathesForKanji(kanji)) {
            reallyShowKanjiStrokes(kanji, kanjiStrokes, parentLocation, programImage);
        }
        else {
            GuiTools.informUser(callingComponent,
                    "Problem bei den Strichfolgen für das Kanji " + kanji,
                    "Zum Kanji " + kanji + " sind keine Striche hinterlegt.");
        }
    }

    private static void reallyShowKanjiStrokes(String kanji, KanjiStrokes kanjiStrokes,
            Point parentLocation, Image programImage) {
        List<KanjiStrokePath> strokes = kanjiStrokes.getPathesByKanji(kanji);

        KanjiStrokeWithControlsPanel kanjiStrokeWithControlsPanel =
                new KanjiStrokeWithControlsPanel(strokes);
        //kanjiStrokeWithControlsPanel.setPreferredSize(KANJI_STROKES_DIALOG_DIMENSION);
        kanjiStrokeWithControlsPanel.setBorderWidth(KANJI_STROKES_DIALOG_BORDER_WIDTH);
        //kanjiStrokeWithControlsPanel.setActualStrokeNumber(0);

        String title = "Darstellung der Strichfolgen des Kanji " + kanji + " ("
                + strokes.size() + " Striche)";
        PanelDialog dialog = new PanelDialog(kanjiStrokeWithControlsPanel.getPanel(),
                parentLocation, programImage, title, KANJI_STROKES_DIALOG_DIMENSION);
        kanjiStrokeWithControlsPanel.keyBindings();
        dialog.setVisible(true);
    }

}
