//Alex Rechtin//
package users;

import com.jfoenix.controls.JFXPasswordField;
import com.jfoenix.controls.JFXTextField;
import com.jfoenix.controls.JFXToggleButton;
import helper.HttpRequestException;
import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.scene.Node;
import javafx.scene.control.Label;
import javafx.stage.Stage;
import container.DataController;
import container.User;

import java.util.Objects;

public class CreateUserController {

    @FXML
    protected JFXTextField textName;
    @FXML
    protected JFXPasswordField textPassword;
    @FXML
    protected JFXPasswordField textPasswordSecond;
    @FXML
    protected JFXToggleButton checkButtonIsAdmin;
    @FXML
    protected JFXTextField textLogin;
    @FXML
    protected JFXTextField textForename;
    @FXML
    protected Label labelError;

    @FXML
    protected void createUser(ActionEvent event) {
        if (validateNameAndLogin() || validatePassword()) return;

        User user = new User();
        user.setLogin(textLogin.getText().trim());
        user.setForename(textForename.getText().trim());
        user.setName(textName.getText().trim());
        user.setPassword(textPassword.getText().trim());
        user.setAdmin(checkButtonIsAdmin.isSelected());

        try {
            sendHttpRequest(user);
        } catch (HttpRequestException e) {
            labelError.setText(e.getMessage());
            return;
        }

        Stage stage = (Stage) ((Node) event.getSource()).getScene().getWindow();
        stage.close();
    }

    protected boolean validatePassword() {
        if (textPassword.getText().trim().isEmpty()) {
            labelError.setText("Bitte Passwort eingeben!");
            return true;
        }
        if (textPassword.getText().trim().length() < 8) {
            labelError.setText("Das Passwort muss mindestens 8 Zeichen lang sein!");
            return true;
        }
        if (!Objects.equals(textPassword.getText(), textPasswordSecond.getText())){
            labelError.setText("Passwörter stimmen nicht überein!");
            return true;
        }
        return false;
    }

    protected boolean validateNameAndLogin() {
        if (textLogin.getText().trim().isEmpty()){
            labelError.setText("Bitte Login Namen angeben");
            return true;
        }
        if (textForename.getText().trim().isEmpty()) {
            labelError.setText("Bitte Vornamen eingeben!");
            return true;
        }
        if (textName.getText().trim().isEmpty()) {
            labelError.setText("Bitte Nachnamen eingeben!");
            return true;
        }
        return false;
    }

    protected void sendHttpRequest(User user) throws HttpRequestException {
        DataController dataController = new DataController();
        dataController.createUser(user);
    }

    @FXML
    protected void abortBtnClick(ActionEvent event) {
        Stage stage = (Stage) ((Node) event.getSource()).getScene().getWindow();
        stage.close();
    }
}