package ui;

import db.TrainingDAO;
import javafx.geometry.Insets;
import javafx.scene.Scene;
import javafx.scene.control.*;
import javafx.scene.layout.*;
import javafx.scene.paint.Color;
import javafx.stage.Stage;
import util.Config;

public class MainUI {

    private final TabPane tabPane = new TabPane();

    private final TrainingFormUI trainingFormUI;
    private final ConfigUI configUI;
    private final Label lblWarning = new Label(); // Warnhinweis oben
    private final Button btnRefreshWarning = new Button("Habe ich alles ausgefüllt?");

    public MainUI(Stage stage) {
        trainingFormUI = new TrainingFormUI();
        configUI = new ConfigUI(stage, this); // <— MainUI wird an ConfigUI übergeben!

        tabPane.getTabs().addAll(
        	    createTab("Erfassung", trainingFormUI),
        	    createTab("Daten", new TrainingOverviewUI()),
        	    createTab("Evaluation", new EvaluationUI()), // <--- new tab here
        	    createTab("Config", configUI)
        	);


        // ------------------------------------------------------------
        // Obere Leiste mit Warnhinweis + Button
        // ------------------------------------------------------------
        HBox warningBox = new HBox(10);
        warningBox.setPadding(new Insets(5, 10, 5, 10));

        lblWarning.setWrapText(true);
        lblWarning.setVisible(true);

        btnRefreshWarning.setOnAction(e -> checkForIncompleteTrainings());
        btnRefreshWarning.setVisible(true);

        warningBox.getChildren().addAll(lblWarning, btnRefreshWarning);

        BorderPane root = new BorderPane();
        root.setTop(warningBox);
        root.setCenter(tabPane);

        Scene scene = new Scene(root, 900, 600);
        stage.setTitle("Schulungsstatistik Tool");
        stage.setScene(scene);
        stage.show();

        // Erste Prüfung beim Start
        checkForIncompleteTrainings();
    }

    private Tab createTab(String name, javafx.scene.Node content) {
        Tab tab = new Tab(name);
        tab.setClosable(false);
        tab.setContent(content);
        return tab;
    }

    public String getDbPath() {
        return Config.getDbPath();
    }
    
    // ------------------------------------------------------------
    // Neue Methode: rotes Label, wenn unvollständige Schulungen existieren
    // ------------------------------------------------------------
    private void checkForIncompleteTrainings() {
        TrainingDAO dao = new TrainingDAO();
        boolean hasIncomplete = dao.hasTrainingsWithoutParticipantsForCurrentUser();
        if (hasIncomplete) {
            lblWarning.setText(            		
                "Es existieren Schulungen in der Vergangenheit ohne Teilnehmerzahl oder Ausfallgrund. Bitte prüfen Sie die Daten."
            );
            lblWarning.setTextFill(Color.RED);
            lblWarning.setStyle("-fx-font-weight: bold;");
        } else {
        	lblWarning.setText(
                    "All Ihre eingetragenen Termine haben entweder eine Teilnehmerzahl oder einen Ausfallgrund. Perfekt!"
                );
        	lblWarning.setTextFill(Color.GREEN);
            lblWarning.setStyle("-fx-font-weight: bold;");
            lblWarning.setVisible(false);
            btnRefreshWarning.setVisible(false);
        }
    }

    /** Wird von ConfigUI aufgerufen, wenn Config neu geladen wurde */
    public void reloadDatabaseDependentData() {
        trainingFormUI.refreshTrainingTypes(); // <— ruft DAO erneut auf
    }
}
