package sample;

import javafx.geometry.Insets;
import javafx.geometry.Pos;
import javafx.scene.Scene;
import javafx.scene.control.*;
import javafx.scene.input.KeyCode;
import javafx.scene.layout.*;
import javafx.stage.Modality;
import javafx.stage.Stage;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLNonTransientConnectionException;
import java.sql.Statement;

/**
 * Created by urankajtazaj on 08/10/16.
 */

public class ShtoKonsumator {
    Stage stage = new Stage();
    TextField txtEmri = new TextField();
    TextField txtMbiemri = new TextField();
    TextField txtVendbanimi = new TextField();
    TextField txtMakina = new TextField();
    TextArea txtDesc = new TextArea();
    Button btnShto = new Button("Shto");
    Button btnPastro = new Button("Anulo");

    private static final String CON_STR = "jdbc:h2:file:~/db/auto";

    public ShtoKonsumator(){
        stage.setTitle("Shto Konsumatore");
        stage.initModality(Modality.APPLICATION_MODAL);
        stage.setResizable(false);
        txtDesc.setPromptText("Informacione shtese");
        txtDesc.setMaxWidth(300);
        txtDesc.setPrefRowCount(4);
        btnShto.setMinWidth(70);
        btnPastro.setMinWidth(60);
        stage.setResizable(false);
        StackPane root = new StackPane();
        VBox v_root = new VBox(0);
        HBox btn = new HBox(5);
        btn.setAlignment(Pos.CENTER_RIGHT);
        btn.getChildren().addAll(btnShto, btnPastro);
        GridPane grid = new GridPane();
        grid.setHgap(5);
        grid.setVgap(8);

        grid.add(new Label("Emri"), 0, 0);
        grid.add(txtEmri, 1, 0);
        grid.add(new Label("Mbiemri"), 0, 1);
        grid.add(txtMbiemri, 1, 1);
        grid.add(new Label("Komuna"), 0, 2);
        grid.add(txtVendbanimi, 1, 2);
        grid.add(new Label("Makina"), 0, 3);
        grid.add(txtMakina, 1, 3);
        grid.add(txtDesc, 1, 4);
        grid.add(btn, 1, 5);
        grid.setAlignment(Pos.CENTER);

        btnShto.setOnAction(e -> {
            shto();
        });
        btnPastro.setOnAction(e -> stage.close());

        txtEmri.setOnKeyPressed(e -> {
            if (e.getCode().equals(KeyCode.ENTER)) shto();
            else if (e.getCode().equals(KeyCode.ESCAPE)) stage.close();
        });
        txtMbiemri.setOnKeyPressed(e -> {
            if (e.getCode().equals(KeyCode.ENTER)) shto();
            else if (e.getCode().equals(KeyCode.ESCAPE)) stage.close();
        });
        txtMakina.setOnKeyPressed(e -> {
            if (e.getCode().equals(KeyCode.ENTER)) shto();
            else if (e.getCode().equals(KeyCode.ESCAPE)) stage.close();
        });
        txtVendbanimi.setOnKeyPressed(e -> {
            if (e.getCode().equals(KeyCode.ENTER)) shto();
            else if (e.getCode().equals(KeyCode.ESCAPE)) stage.close();
        });

        v_root.getChildren().addAll(grid);
        v_root.setAlignment(Pos.CENTER);
        root.getChildren().add(v_root);
        root.setPadding(new Insets(15));
        Scene scene = new Scene(root, 420, 390);
        scene.getStylesheets().add(getClass().getResource("/sample/style.css").toExternalForm());
        stage.setScene(scene);
        stage.show();
    }

    public ShtoKonsumator(int id, String emri, String mbiemri, String makina, String komuna, String per, ShikoKonsumatoret sk){
        stage.setTitle("Shto Konsumatore");
        stage.initModality(Modality.APPLICATION_MODAL);
        stage.setResizable(false);
        txtDesc.setPromptText("Pershkrimi (opcional)");
        txtDesc.setMaxWidth(300);
        txtDesc.setPrefRowCount(4);
        btnShto.setMinWidth(70);
        btnPastro.setMinWidth(60);
        stage.setResizable(false);
        txtEmri.setText(emri);
        txtMbiemri.setText(mbiemri);
        txtDesc.setText(per);
        txtMakina.setText(makina);
        txtVendbanimi.setText(komuna);
        StackPane root = new StackPane();
        VBox v_root = new VBox(0);
        HBox btn = new HBox(5);
        btn.setAlignment(Pos.CENTER_RIGHT);
        btn.getChildren().addAll(btnShto, btnPastro);
        GridPane grid = new GridPane();
        grid.setHgap(5);
        grid.setVgap(8);
        btnShto.setText("Azhurno");

        grid.add(new Label("Emri"), 0, 0);
        grid.add(txtEmri, 1, 0);
        grid.add(new Label("Mbiemri"), 0, 1);
        grid.add(txtMbiemri, 1, 1);
        grid.add(new Label("Komuna"), 0, 2);
        grid.add(txtVendbanimi, 1, 2);
        grid.add(new Label("Makina"), 0, 3);
        grid.add(txtMakina, 1, 3);
        grid.add(txtDesc, 1, 4);
        grid.add(btn, 1, 5);
        grid.setAlignment(Pos.CENTER);

        btnShto.setOnAction(e -> {
            shto(id, sk);
            stage.close();
        });
        txtEmri.setOnKeyPressed(e -> {
            if (e.getCode().equals(KeyCode.ENTER)) shto(id, sk);
            else if (e.getCode().equals(KeyCode.ESCAPE)) stage.close();
        });
        txtMbiemri.setOnKeyPressed(e -> {
            if (e.getCode().equals(KeyCode.ENTER)) shto(id, sk);
            else if (e.getCode().equals(KeyCode.ESCAPE)) stage.close();
        });
        txtMakina.setOnKeyPressed(e -> {
            if (e.getCode().equals(KeyCode.ENTER)) shto(id, sk);
            else if (e.getCode().equals(KeyCode.ESCAPE)) stage.close();
        });
        txtVendbanimi.setOnKeyPressed(e -> {
            if (e.getCode().equals(KeyCode.ENTER)) shto(id, sk);
            else if (e.getCode().equals(KeyCode.ESCAPE)) stage.close();
        });

        btnPastro.setOnAction(e -> stage.close());

        v_root.getChildren().addAll(grid);
        v_root.setAlignment(Pos.CENTER);
        root.getChildren().add(v_root);
        Scene scene = new Scene(root, 420, 390);
        scene.getStylesheets().add(getClass().getResource("/sample/style.css").toExternalForm());
        stage.setScene(scene);
        stage.show();
    }

    public ShtoKonsumator(String emri, String mbiemri, String makina){
        stage.setTitle("Shto Konsumatore");
        stage.initModality(Modality.APPLICATION_MODAL);
        stage.setResizable(false);
        txtDesc.setPromptText("Pershkrimi (opcional)");
        txtMbiemri.setText(mbiemri);
        txtEmri.setText(emri);
        txtMakina.setText(makina);
        txtDesc.setMaxWidth(300);
        txtDesc.setPrefRowCount(4);
        btnShto.setMinWidth(70);
        btnPastro.setMinWidth(60);
        stage.setResizable(false);
        StackPane root = new StackPane();
        VBox v_root = new VBox(0);
        HBox btn = new HBox(5);
        btn.setAlignment(Pos.CENTER_RIGHT);
        btn.getChildren().addAll(btnShto, btnPastro);
        GridPane grid = new GridPane();
        grid.setHgap(5);
        grid.setVgap(8);

        grid.getStyleClass().add("grid-add");

        grid.add(new Label("Emri"), 0, 0);
        grid.add(txtEmri, 1, 0);
        grid.add(new Label("Mbiemri"), 0, 1);
        grid.add(txtMbiemri, 1, 1);
        grid.add(new Label("Komuna"), 0, 2);
        grid.add(txtVendbanimi, 1, 2);
        grid.add(new Label("Makina"), 0, 3);
        grid.add(txtMakina, 1, 3);
        grid.add(txtDesc, 1, 4);
        grid.add(btn, 1, 5);
        grid.setAlignment(Pos.CENTER);

        btnShto.setOnAction(e -> {
            shto();
            stage.close();
        });
        btnPastro.setOnAction(e -> stage.close());

        txtEmri.setOnKeyPressed(e -> {
            if (e.getCode().equals(KeyCode.ENTER)) {shto(); stage.close();}
            else if (e.getCode().equals(KeyCode.ESCAPE)) stage.close();
        });
        txtMbiemri.setOnKeyPressed(e -> {
            if (e.getCode().equals(KeyCode.ENTER)) {shto(); stage.close();}
            else if (e.getCode().equals(KeyCode.ESCAPE)) stage.close();
        });
        txtMakina.setOnKeyPressed(e -> {
            if (e.getCode().equals(KeyCode.ENTER)) {shto(); stage.close();}
            else if (e.getCode().equals(KeyCode.ESCAPE)) stage.close();
        });
        txtVendbanimi.setOnKeyPressed(e -> {
            if (e.getCode().equals(KeyCode.ENTER)) {shto(); stage.close();}
            else if (e.getCode().equals(KeyCode.ESCAPE)) stage.close();
        });

        v_root.getChildren().addAll(grid);
        v_root.setAlignment(Pos.CENTER);
        root.getChildren().add(v_root);
        Scene scene = new Scene(root, 420, 390);
        scene.getStylesheets().add(getClass().getResource("/sample/style.css").toExternalForm());
        stage.setScene(scene);
        stage.show();
    }

    private void shto(){
        try {
            if (!txtEmri.getText().isEmpty() && !txtVendbanimi.getText().isEmpty() && !txtMakina.getText().isEmpty()
                    && !txtMbiemri.getText().isEmpty()) {
                String em = txtEmri.getText().substring(0, 1).toUpperCase() + txtEmri.getText().substring(1, txtEmri.getText().length()).toLowerCase();
                String mb = txtMbiemri.getText().substring(0, 1).toUpperCase() + txtMbiemri.getText().substring(1, txtMbiemri.getText().length()).toLowerCase();
                String sql = "insert into Konsumatori (emri, mbiemri, makina, komuna, pershkrimi) values ('" + em + "', " +
                        "'" + mb + "', '" + txtMakina.getText() + "', '" + txtVendbanimi.getText() + "', " +
                        "'" + txtDesc.getText() + "')";
                Connection conn = DriverManager.getConnection(CON_STR, "test", "test");
                Statement stmt = conn.createStatement();
                stmt.execute(sql);
                conn.close();
                new Mesazhi("Sukses", "Sukses", "Konsumatori " + txtEmri.getText().toUpperCase() + " " +
                        txtMbiemri.getText().toUpperCase() + " u shtua me sukese");
            }else new Mesazhi("Info", "", "Fushat duhet te plotesohen per te vazhduar.");
        }catch (SQLNonTransientConnectionException fu){}
        catch (Exception ex){
            ex.printStackTrace();
        }
    }

    private void shto(int id, ShikoKonsumatoret sk){
        try {
            if (!txtEmri.getText().isEmpty() && !txtVendbanimi.getText().isEmpty() && !txtMakina.getText().isEmpty()
                    && !txtMbiemri.getText().isEmpty()){
                String em = txtEmri.getText().substring(0, 1).toUpperCase() + txtEmri.getText().substring(1, txtEmri.getText().length()).toLowerCase();
                String mb = txtMbiemri.getText().substring(0, 1).toUpperCase() + txtMbiemri.getText().substring(1, txtMbiemri.getText().length()).toLowerCase();
                String sql = "update Konsumatori set emri = '" + em + "', mbiemri = '" + mb + "'," +
                        " komuna = '" + txtVendbanimi.getText() + "', makina = '" + txtMakina.getText() + "', pershkrimi = '" +
                        txtDesc.getText() + "' where id = " + id;
                Connection conn = DriverManager.getConnection(CON_STR, "test", "test");
                Statement stmt = conn.createStatement();
                stmt.execute(sql);
                new Mesazhi("Sukses", "Te dhenat u ruajten", "Te dhenat per konsumatorin " + txtEmri.getText() + " " +
                txtMbiemri.getText() + ",\n u azhurnuan me sukses");
                conn.close();
                new Thread(new Runnable() {
                    @Override
                    public void run() {
                        sk.mbushTabelen();
                    }
                }).start();
                stage.close();
            }else new Mesazhi("Info", "", "Fushat duhet te plotesohen per te vazhduar.");
        }catch (SQLNonTransientConnectionException fu){}
        catch (Exception ex){
            ex.printStackTrace();
        }
    }
}