package javacodebook.misc.mail_attach;

import javax.swing.*;
import java.awt.event.*;
import java.awt.*;
import java.io.File;

/**
 *
 * @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("Senden");
        cancel           = new JButton("Abbrechen");
        main             = new JPanel();
        labelHost        = new JLabel("SMTP-Host:");
        labelSender      = new JLabel("Absender:");
        labelRecipient   = new JLabel("Empf\u00e4nger:");
        labelSubject     = new JLabel("Betreff:");
        labelAttachment  = new JLabel("Attachment:");
        inputHost        = new JTextField();
        inputSender      = new JTextField();
        inputRecipient   = new JTextField();
        inputSubject     = new JTextField();
        inputAttachment  = new JTextField();
        inputText        = new JTextArea();
        scrollText       = new JScrollPane();
        buttonAttachment = new JButton("...");
        
        main.setLayout(new GridBagLayout());
        GridBagConstraints gridBagConstraints;
        
        gridBagConstraints = new GridBagConstraints();
        gridBagConstraints.gridx = 0;
        gridBagConstraints.gridy = 0;
        gridBagConstraints.insets = new Insets(2, 5, 3, 5);
        gridBagConstraints.anchor = GridBagConstraints.WEST;
        main.add(labelHost, gridBagConstraints);
        
        gridBagConstraints = new GridBagConstraints();
        gridBagConstraints.gridx = 0;
        gridBagConstraints.gridy = 1;
        gridBagConstraints.insets = new Insets(2, 5, 3, 5);
        gridBagConstraints.anchor = GridBagConstraints.WEST;
        main.add(labelSender, gridBagConstraints);
        
        gridBagConstraints = new GridBagConstraints();
        gridBagConstraints.gridx = 0;
        gridBagConstraints.gridy = 2;
        gridBagConstraints.insets = new Insets(2, 5, 3, 5);
        gridBagConstraints.anchor = GridBagConstraints.WEST;
        main.add(labelRecipient, gridBagConstraints);
        
        gridBagConstraints = new GridBagConstraints();
        gridBagConstraints.gridx = 0;
        gridBagConstraints.gridy = 3;
        gridBagConstraints.insets = new Insets(2, 5, 3, 5);
        gridBagConstraints.anchor = GridBagConstraints.WEST;
        main.add(labelSubject, gridBagConstraints);
        
        gridBagConstraints = new GridBagConstraints();
        gridBagConstraints.gridx = 0;
        gridBagConstraints.gridy = 4;
        gridBagConstraints.insets = new Insets(2, 5, 3, 5);
        gridBagConstraints.anchor = GridBagConstraints.WEST;
        main.add(labelAttachment, gridBagConstraints);
        
        gridBagConstraints = new GridBagConstraints();
        gridBagConstraints.gridx = 1;
        gridBagConstraints.gridy = 0;
        gridBagConstraints.gridwidth = 2;
        gridBagConstraints.fill = GridBagConstraints.HORIZONTAL;
        gridBagConstraints.insets = new Insets(2, 0, 3, 5);
        gridBagConstraints.anchor = GridBagConstraints.WEST;
        gridBagConstraints.weightx = 1.0;
        main.add(inputHost, gridBagConstraints);
        
        gridBagConstraints = new GridBagConstraints();
        gridBagConstraints.gridx = 1;
        gridBagConstraints.gridy = 1;
        gridBagConstraints.gridwidth = 2;
        gridBagConstraints.fill = GridBagConstraints.HORIZONTAL;
        gridBagConstraints.insets = new Insets(2, 0, 3, 5);
        gridBagConstraints.anchor = GridBagConstraints.WEST;
        gridBagConstraints.weightx = 1.0;
        main.add(inputSender, gridBagConstraints);
        
        gridBagConstraints = new GridBagConstraints();
        gridBagConstraints.gridx = 1;
        gridBagConstraints.gridy = 2;
        gridBagConstraints.gridwidth = 2;
        gridBagConstraints.fill = GridBagConstraints.HORIZONTAL;
        gridBagConstraints.insets = new Insets(2, 0, 3, 5);
        gridBagConstraints.anchor = GridBagConstraints.WEST;
        gridBagConstraints.weightx = 1.0;
        main.add(inputRecipient, gridBagConstraints);
        
        gridBagConstraints = new GridBagConstraints();
        gridBagConstraints.gridx = 1;
        gridBagConstraints.gridy = 3;
        gridBagConstraints.gridwidth = 2;
        gridBagConstraints.fill = GridBagConstraints.HORIZONTAL;
        gridBagConstraints.insets = new Insets(2, 0, 3, 5);
        gridBagConstraints.anchor = GridBagConstraints.WEST;
        gridBagConstraints.weightx = 1.0;
        main.add(inputSubject, gridBagConstraints);
        
        inputAttachment.setEditable(false);
        gridBagConstraints = new GridBagConstraints();
        gridBagConstraints.gridx = 1;
        gridBagConstraints.gridy = 4;
        gridBagConstraints.fill = GridBagConstraints.HORIZONTAL;
        gridBagConstraints.insets = new Insets(2, 0, 3, 5);
        gridBagConstraints.anchor = GridBagConstraints.WEST;
        gridBagConstraints.weightx = 1.0;
        main.add(inputAttachment, gridBagConstraints);
        
        buttonAttachment.setActionCommand("attachment");
        buttonAttachment.addActionListener(this);
        
        gridBagConstraints = new GridBagConstraints();
        gridBagConstraints.gridx = 2;
        gridBagConstraints.gridy = 4;
        gridBagConstraints.fill = GridBagConstraints.HORIZONTAL;
        gridBagConstraints.insets = new Insets(2, 0, 3, 5);
        gridBagConstraints.anchor = GridBagConstraints.WEST;
        main.add(buttonAttachment, gridBagConstraints);
        
        inputText.setLineWrap(true);
        inputText.setWrapStyleWord(true);
        inputText.setColumns(40);
        inputText.setRows(10);
        scrollText.setViewportView(inputText);
        
        gridBagConstraints = new GridBagConstraints();
        gridBagConstraints.gridx = 0;
        gridBagConstraints.gridy = 5;
        gridBagConstraints.gridwidth = 3;
        gridBagConstraints.fill = GridBagConstraints.BOTH;
        gridBagConstraints.insets = new Insets(0, 5, 0, 5);
        gridBagConstraints.weightx = 1.0;
        gridBagConstraints.weighty = 1.0;
        main.add(scrollText, gridBagConstraints);
        
        setTitle("Neue Nachricht");
        
        send.setMnemonic('S');
        send.setActionCommand("send");
        send.addActionListener(this);
        buttons.add(send);
        
        cancel.setMnemonic('A');
        cancel.setActionCommand("cancel");
        cancel.addActionListener(this);
        buttons.add(cancel);
        
        getContentPane().add(buttons, BorderLayout.SOUTH);
        getContentPane().add(main, 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")) {
            AttachmentMailSender ams = new AttachmentMailSender();
            ams.setHost(inputHost.getText());
            ams.setRecipient(inputRecipient.getText());
            ams.setSender(inputSender.getText());
            ams.setSubject(inputSubject.getText());
            ams.setText(inputText.getText());
            ams.setAttachment(attachment);
            try {
                ams.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 if (evt.getActionCommand().equals("attachment")) {
            try {
                JFileChooser chooser = new JFileChooser();
                int returnVal = chooser.showOpenDialog(this);
                if(returnVal == JFileChooser.APPROVE_OPTION) {
                    attachment = chooser.getSelectedFile();
                    inputAttachment.setText(attachment.getName());
                }
            }
            catch (Exception e) {}
        }
        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 JTextField  inputAttachment;
    private JScrollPane scrollText;
    private JTextArea   inputText;
    private JLabel      labelHost;
    private JLabel      labelSubject;
    private JLabel      labelSender;
    private JLabel      labelRecipient;
    private JLabel      labelAttachment;
    private JButton     buttonAttachment;
    
    private File        attachment;
}