package javacodebook.misc.mail_send;

import javax.swing.*;
import java.awt.event.*;

/**
 *
 * @author  Mark Donnermeyer
 */
public class MailSendFrame extends JFrame implements ActionListener {

    public static void main(String []args) {
            (new MailSendFrame()).show();
    }
    
    public MailSendFrame() {
        super();
        initComponents();
    }
    
    /**
     * Das GUI-Layout erzeugen
     */
    private void initComponents() {
        buttons = new JPanel();
        send    = new JButton();
        cancel  = new JButton();
        main    = new JPanel();
        
        java.awt.GridBagConstraints gridBagConstraints;
        
        labelHost      = new JLabel();
        labelSender    = new JLabel();
        labelRecipient = new JLabel();
        labelSubject   = new JLabel();
        inputHost      = new JTextField();
        inputSender    = new JTextField();
        inputRecipient = new JTextField();
        inputSubject   = new JTextField();
        inputText      = new JTextArea();
        scrollText     = new JScrollPane();
        
        main.setLayout(new java.awt.GridBagLayout());
        
        labelHost.setText("SMTP-Host:");
        gridBagConstraints = new java.awt.GridBagConstraints();
        gridBagConstraints.gridx = 0;
        gridBagConstraints.gridy = 0;
        gridBagConstraints.insets = new java.awt.Insets(2, 5, 3, 5);
        gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
        main.add(labelHost, gridBagConstraints);
        
        labelSender.setText("Absender:");
        gridBagConstraints = new java.awt.GridBagConstraints();
        gridBagConstraints.gridx = 0;
        gridBagConstraints.gridy = 1;
        gridBagConstraints.insets = new java.awt.Insets(2, 5, 3, 5);
        gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
        main.add(labelSender, gridBagConstraints);
        
        labelRecipient.setText("Empf\u00e4nger:");
        gridBagConstraints = new java.awt.GridBagConstraints();
        gridBagConstraints.gridx = 0;
        gridBagConstraints.gridy = 2;
        gridBagConstraints.insets = new java.awt.Insets(2, 5, 3, 5);
        gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
        main.add(labelRecipient, gridBagConstraints);
        
        labelSubject.setText("Betreff:");
        gridBagConstraints = new java.awt.GridBagConstraints();
        gridBagConstraints.gridx = 0;
        gridBagConstraints.gridy = 3;
        gridBagConstraints.insets = new java.awt.Insets(2, 5, 3, 5);
        gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
        main.add(labelSubject, gridBagConstraints);
        
        gridBagConstraints = new java.awt.GridBagConstraints();
        gridBagConstraints.gridx = 1;
        gridBagConstraints.gridy = 0;
        gridBagConstraints.gridwidth = java.awt.GridBagConstraints.RELATIVE;
        gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
        gridBagConstraints.insets = new java.awt.Insets(2, 0, 3, 5);
        gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
        gridBagConstraints.weightx = 1.0;
        main.add(inputHost, gridBagConstraints);
        
        gridBagConstraints = new java.awt.GridBagConstraints();
        gridBagConstraints.gridx = 1;
        gridBagConstraints.gridy = 1;
        gridBagConstraints.gridwidth = java.awt.GridBagConstraints.RELATIVE;
        gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
        gridBagConstraints.insets = new java.awt.Insets(2, 0, 3, 5);
        gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
        gridBagConstraints.weightx = 1.0;
        main.add(inputSender, gridBagConstraints);
        
        gridBagConstraints = new java.awt.GridBagConstraints();
        gridBagConstraints.gridx = 1;
        gridBagConstraints.gridy = 2;
        gridBagConstraints.gridwidth = java.awt.GridBagConstraints.RELATIVE;
        gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
        gridBagConstraints.insets = new java.awt.Insets(2, 0, 3, 5);
        gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
        gridBagConstraints.weightx = 1.0;
        main.add(inputRecipient, gridBagConstraints);
        
        gridBagConstraints = new java.awt.GridBagConstraints();
        gridBagConstraints.gridx = 1;
        gridBagConstraints.gridy = 3;
        gridBagConstraints.gridwidth = java.awt.GridBagConstraints.RELATIVE;
        gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
        gridBagConstraints.insets = new java.awt.Insets(2, 0, 3, 5);
        gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
        gridBagConstraints.weightx = 1.0;
        main.add(inputSubject, gridBagConstraints);
        
        inputText.setLineWrap(true);
        inputText.setWrapStyleWord(true);
        inputText.setColumns(40);
        inputText.setRows(10);
        scrollText.setViewportView(inputText);
        
        gridBagConstraints = new java.awt.GridBagConstraints();
        gridBagConstraints.gridx = 0;
        gridBagConstraints.gridy = 4;
        gridBagConstraints.gridwidth = 2;
        gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH;
        gridBagConstraints.insets = new java.awt.Insets(0, 5, 0, 5);
        gridBagConstraints.weightx = 1.0;
        gridBagConstraints.weighty = 1.0;
        main.add(scrollText, gridBagConstraints);
        
        setTitle("Neue Nachricht");
        
        send.setMnemonic('S');
        send.setText("Senden");
        send.setActionCommand("send");
        send.addActionListener(this);
        buttons.add(send);
        
        cancel.setMnemonic('A');
        cancel.setText("Abbrechen");
        cancel.setActionCommand("cancel");
        cancel.addActionListener(this);
        buttons.add(cancel);
        
        getContentPane().add(buttons, java.awt.BorderLayout.SOUTH);
        getContentPane().add(main, java.awt.BorderLayout.CENTER);
        pack();
    }
    
    /**
     * Vesenden der Mail, wenn der Benutzer den "Senden"-Button gedrückt hat,
     * bzw. Beenden des Programmes, wenn er "Abbrechen" gedrückt hat.
     */
    public void actionPerformed(ActionEvent evt) {
        if (evt.getActionCommand().equals("send")) {
            SimpleMailSender sms = new SimpleMailSender();
            sms.setHost(inputHost.getText());
            sms.setRecipient(inputRecipient.getText());
            sms.setSender(inputSender.getText());
            sms.setSubject(inputSubject.getText());
            sms.setText(inputText.getText());
            try {
                sms.sendMessage();
                System.exit(0);
            }
            catch (Exception e) {
                JOptionPane.showMessageDialog(
                    this, 
                    "Mail konnte nicht versendet werden!\n" +
                    "Fehler: " + e.getMessage(), 
                    "Fehler beim Versenden", 
                    JOptionPane.ERROR_MESSAGE
                );
            }
        }
        else
            System.exit(0);
    }
    
    // Variablendeklaration
    private JButton     send;
    private JButton     cancel;
    private JPanel      buttons;
    private JPanel      main;
    private JTextField  inputSender;
    private JTextField  inputRecipient;
    private JTextField  inputSubject;
    private JTextField  inputHost;
    private JScrollPane scrollText;
    private JTextArea   inputText;
    private JLabel      labelHost;
    private JLabel      labelSubject;
    private JLabel      labelSender;
    private JLabel      labelRecipient;
}