/*
 * SIP Communicator, the OpenSource Java VoIP and Instant Messaging client.
 *
 * Distributable under LGPL license.
 * See terms of license at gnu.org.
 */
package net.java.sip.communicator.plugin.whiteboard.gui;

import java.awt.*;
import java.awt.event.*;

import javax.swing.*;

import net.java.sip.communicator.plugin.whiteboard.*;
import net.java.sip.communicator.service.protocol.*;
import net.java.sip.communicator.util.swing.*;

/**
 * The dialog that pops up when a chat room invitation is received.
 *  
 * @author Yana Stamcheva
 */
public class InvitationReceivedDialog
    extends SIPCommDialog
    implements ActionListener
{
    private JTextArea infoTextArea = new JTextArea();

    private JTextArea invitationReasonTextArea = new JTextArea();

    private JPanel reasonPanel = new TransparentPanel(new BorderLayout());

    private JLabel reasonLabel = new JLabel(
        Resources.getString("reason") + ": ");

    private JTextField reasonField = new JTextField();

    private JPanel dataPanel = new TransparentPanel(new BorderLayout(10, 10));

    private JPanel buttonsPanel = new TransparentPanel(new FlowLayout(FlowLayout.RIGHT));

    private JButton acceptButton = new JButton(Resources.getString("accept"));
    
    private JButton rejectButton = new JButton(Resources.getString("reject"));
    
    private JButton ignoreButton = new JButton(Resources.getString("ignore"));
    
    private JPanel mainPanel = new TransparentPanel(new BorderLayout(10, 10));
    
    private JPanel northPanel = new TransparentPanel(new BorderLayout(10, 10));
    
    private JLabel iconLabel = new JLabel(Resources.getImage("inviteIcon"));
    
    private String title
        = Resources.getString("invitationReceived");
    
    /**
     * The <tt>ChatRoomInvitation</tt> for which this dialog is.
     */
    private WhiteboardInvitation invitation;

    /**
     * The <tt>MultiUserChatManager</tt> is the one that deals with invitation
     * events.
     */
    private WhiteboardSessionManager whiteboardManager;

    /**
     * The operation set that would handle the rejection if the user choose to
     * reject the invitation.
     */
    private OperationSetWhiteboarding whiteboardOpSet;
    
    /**
     * Constructs the <tt>ChatInviteDialog</tt>.
     * 
     * @param whiteboardManager the <tt>WhiteboardSessionManager</tt> is the one
     * that deals with invitation events
     * @param whiteboardOpSet the operation set that would handle the
     * rejection if the user choose to reject the invitation
     * @param invitation the invitation that this dialog represents
     */
    public InvitationReceivedDialog (WhiteboardSessionManager whiteboardManager,
            OperationSetWhiteboarding whiteboardOpSet,
            WhiteboardInvitation invitation)
    {
        this.whiteboardManager = whiteboardManager;

        this.whiteboardOpSet = whiteboardOpSet;

        this.invitation = invitation;

        this.setModal(false);

        this.setTitle(title);

        this.mainPanel.setPreferredSize(new Dimension(400, 230));

        infoTextArea.setText(
            Resources.getString("invitationReceivedFormInfo",
                new String[] {  invitation.getInviter(),
                                invitation.getTargetWhiteboard()
                                    .getWhiteboardID()}));

        if(invitation.getReason() != null && invitation.getReason() != "")
        {
            invitationReasonTextArea.setText(invitation.getReason());
            invitationReasonTextArea.setBorder(
                BorderFactory.createTitledBorder(
                    Resources.getString("invitation")));

            this.dataPanel.add(invitationReasonTextArea, BorderLayout.CENTER);
        }
        
        this.infoTextArea.setFont(
            infoTextArea.getFont().deriveFont(Font.BOLD, 12f));
        this.infoTextArea.setLineWrap(true);
        this.infoTextArea.setOpaque(false);
        this.infoTextArea.setWrapStyleWord(true);
        this.infoTextArea.setEditable(false);
        
        this.northPanel.add(iconLabel, BorderLayout.WEST);
        this.northPanel.add(infoTextArea, BorderLayout.CENTER);
        
        this.reasonPanel.add(reasonLabel, BorderLayout.WEST);
        this.reasonPanel.add(reasonField, BorderLayout.CENTER);
        
        this.dataPanel.add(reasonPanel, BorderLayout.SOUTH);
        
        this.acceptButton.addActionListener(this);
        this.rejectButton.addActionListener(this);
        this.ignoreButton.addActionListener(this);
        
        this.buttonsPanel.add(acceptButton);
        this.buttonsPanel.add(rejectButton);
        this.buttonsPanel.add(ignoreButton);
        
        this.getRootPane().setDefaultButton(acceptButton);
        this.acceptButton.setMnemonic(Resources.getMnemonic("accept"));
        this.rejectButton.setMnemonic(Resources.getMnemonic("reject"));
        this.ignoreButton.setMnemonic(Resources.getMnemonic("ignore"));
        
        this.mainPanel.setBorder(
            BorderFactory.createEmptyBorder(15, 15, 15, 15));
        
        this.mainPanel.add(northPanel, BorderLayout.NORTH);
        this.mainPanel.add(dataPanel, BorderLayout.CENTER);
        this.mainPanel.add(buttonsPanel, BorderLayout.SOUTH);
        
        this.getContentPane().add(mainPanel);
    }
    
    /**
     * Handles the <tt>ActionEvent</tt> triggered when one user clicks
     * on one of the buttons.
     */
    public void actionPerformed(ActionEvent e)
    {
        JButton button = (JButton)e.getSource();
        
        if (button.equals(acceptButton))
        {
            whiteboardManager.acceptInvitation(invitation);
        }
        else if (button.equals(rejectButton))
        {
            whiteboardManager.rejectInvitation(whiteboardOpSet,
                invitation, reasonField.getText());
        }
        
        this.dispose();
    }

    protected void close(boolean isEscaped)
    {
        rejectButton.doClick();
    }
}