package vue;

import javafx.geometry.Pos;
import javafx.scene.Scene;
import javafx.scene.control.Alert;
import javafx.scene.control.Button;
import javafx.scene.control.DatePicker;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
import javafx.scene.layout.HBox;
import javafx.scene.layout.VBox;
import javafx.scene.paint.Color;
import javafx.scene.text.Font;
import javafx.scene.text.Text;
import javafx.stage.FileChooser;
import javafx.stage.Stage;
import modele.Evenement;
import modele.User;
import javafx.scene.control.TextField;
//import java.awt.TextArea;
import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.time.LocalDate;
import java.time.ZoneId;
import java.time.format.DateTimeFormatter;
import java.util.Date;

import controlleur.BDD;
import controlleur.ControllerAdmin;
import controlleur.EvenementController;

public class AfficheAdmin {
	private static VBox events;
	private static Stage stage;
	private static User sess;

	public static Stage getStage() {
		return stage;
	}

	public static void setStage(Stage stage) {
		AfficheAdmin.stage = stage;
	}

	public static User getSess() {
		return sess;
	}

	public static void setSess(User sess) {
		AfficheAdmin.sess = sess;
	}

	public static VBox getEvents() {
		return events;
	}
	
	public static void affiche(Stage primaryStage, User session) {
		stage = primaryStage;
		sess = session;
		events = EvenementController.EvenementVBox();
		AfficheTopMenu menu = new AfficheTopMenu(stage,sess);
    	Text titre = new Text("Mes évènements");
    	titre.setFont(Font.font("Arial", 30));
        titre.setFill(Color.web("#2C3E50")); 
        titre.setStroke(Color.web("#34495E"));
        titre.setStrokeWidth(1);
        
        
        // Création du DatePicker
        DatePicker date = new DatePicker();
        date.setMaxWidth(60);
        
    	VBox vTitre = new VBox(titre);
        Button parcourir = new Button("Parcourir");
        Button valider = new Button("Valider");
        TextField nom = new TextField("");
        nom.setPromptText("Nom de l'évènement");
        TextField descEvent = new TextField();
        descEvent.setPromptText("Quelques mots pour votre évènement ?");
        descEvent.setPrefWidth(250);
        
        // Création d'un ImageView pour afficher l'image
        ImageView imageView = new ImageView();
        imageView.setPreserveRatio(true);
        imageView.setFitWidth(80);
        
        // Action des boutons
        parcourir.setOnAction(e -> {
        	ControllerAdmin.parcourir(stage, imageView);
        });
        
        valider.setOnAction(e -> {
        	if (nom.getText().isEmpty() || descEvent.getText().isEmpty()||ControllerAdmin.getFile() == null){
        		
        		// Affichage du message d'erreur si n champ est vide
                showErrorMessage("Tous les champs doivent être remplis.");
        	}
        	else {
	        	// Récupération de la date sélectionnée
	        	LocalDate localDate = date.getValue();
	        	
	        	if (localDate != null) {
	                // Formater la date en chaîne de caractères au format "yyyy-MM-dd"
	                String dateString = localDate.format(DateTimeFormatter.ISO_LOCAL_DATE);
	                System.out.println("Date sélectionnée : " + dateString);
	                System.out.println(dateString);
	                System.out.println("Date sélectionnée (java.util.Date) : " + dateString);
	                events = ControllerAdmin.valider(nom.getText(),ControllerAdmin.getFile().getName(),descEvent.getText(), dateString);
	                AfficheAdmin.affiche(stage, sess);
	            }
	        	else {
	        		
	        		// Affichage du message d'erreur si n champ est vide
	                showErrorMessage("Tous les champs doivent être remplis.");
	        	}
        	}
        });
        
        // VBox principal
        HBox hbox = new HBox(20);
        hbox.getChildren().addAll(nom, imageView, descEvent, date, parcourir, valider);
        hbox.setAlignment(Pos.CENTER);

        VBox root = new VBox();
        root.getChildren().addAll(menu,vTitre,hbox,events);
        
        // Ajout du VBox à la scène
        Scene scene = new Scene(root, 800, 600);

        // Ajout d'un titre à la fenêtre
        primaryStage.setTitle("StatHammer : Admin");
        primaryStage.setScene(scene);
        primaryStage.show();
    }

	public static void setEvents(VBox events) {
		AfficheAdmin.events = events;
	}
	
    // Méthode pour afficher une erreur
    private static void showErrorMessage(String message) {
        Alert alert = new Alert(Alert.AlertType.ERROR);
        alert.setTitle("StatHammer : Erreur dans le formulaire");
        alert.setHeaderText(null);
        alert.setContentText(message);
        alert.showAndWait();
    }

}
