/*
 * This file is part of the LibreOffice project.
 *
 * This Source Code Form is subject to the terms of the Mozilla Public
 * License, v. 2.0. If a copy of the MPL was not distributed with this
 * file, You can obtain one at http://mozilla.org/MPL/2.0/.
 *
 * This file incorporates work covered by the following license notice:
 *
 *   Licensed to the Apache Software Foundation (ASF) under one or more
 *   contributor license agreements. See the NOTICE file distributed
 *   with this work for additional information regarding copyright
 *   ownership. The ASF licenses this file to you under the Apache
 *   License, Version 2.0 (the "License"); you may not use this file
 *   except in compliance with the License. You may obtain a copy of
 *   the License at http://www.apache.org/licenses/LICENSE-2.0 .
 */

package org.libreoffice.example.java_scripts;

import javax.mail.*;
import javax.mail.internet.*;
import com.msoft.mail.provider.nntp.NNTPTransport;
import java.util.Properties;
import java.io.*;
import javax.activation.*;


public class Sender
{
    // Constructor params:
    private StatusWindow status = null;
    private OfficeAttachment attachments = null;
    private String replyto = "";
        private String subject = "";
        private String comment = "";
        private String hostname = "";
        private String newsgroup = "";
    private String statusLine = "";



    public Sender( StatusWindow sw, OfficeAttachment attach, String reply,
               String sub, String com, String host, String group )
    {
        status = sw;
        attachments = attach;
                replyto = reply;
                subject = sub;
                comment = com;
                hostname = host;
                newsgroup = group;
    }



    public boolean sendMail()
    {
        int statusPos = 5;
        try
        {
            attachments.createTempDocs();
            // Property for any information
            Properties props = new Properties();

            // Create unique session (null is unused authenticator info)
            statusLine = "Creating unique session";
            status.setStatus( statusPos, statusLine ); // 5
            Session session = Session.getInstance( props, null );

            // Create message
            statusPos++; // 6
            statusLine = "Creating message";
            status.setStatus( statusPos, statusLine );
            MimeMessage message = new MimeMessage( session );
            message.setFrom( new InternetAddress( replyto ) );
            message.setSubject( subject );
            message.setText( comment );
            message.addHeader( "Newsgroups", newsgroup );

            // Buildup bodypart with text and attachments
            Multipart multipart = new MimeMultipart();

            BodyPart messageBodyPart = new MimeBodyPart();
            messageBodyPart.setText( comment );
            multipart.addBodyPart( messageBodyPart );

            statusPos++; // 7
            statusLine = "Adding attachment(s)";
            status.setStatus( statusPos, statusLine );
            File attachs[] = attachments.getAttachments();
            for(int i=0; i < attachs.length; i++ )
            {
                //System.out.println( "Adding file: " + attachs[i].getName() );
                messageBodyPart = new MimeBodyPart();
                DataSource filesource = new FileDataSource( attachs[i] );
                messageBodyPart.setDataHandler( new DataHandler( filesource ));
                messageBodyPart.setFileName( attachs[i].getName() );
                multipart.addBodyPart( messageBodyPart );
            }

            // Add multipart to mail
            message.setContent( multipart );

            // Create and send NNTP transport
            statusPos += 2; // 9
            statusLine = "Creating NNTP transport";
            status.setStatus( statusPos, statusLine );
            Transport transport = new NNTPTransport( session, new URLName( "news:" + newsgroup ));

            // Null parameters are for user name and password
            statusPos++; // 10
            statusLine = "Connecting to mail server";
            status.setStatus( statusPos, statusLine );
            transport.connect( hostname, null, null );

            statusPos++; // 11
            statusLine = "Sending message";
            status.setStatus( statusPos, statusLine );
            transport.sendMessage( message, message.getAllRecipients() );

            statusPos++; // 12
            statusLine = "Closing transport";
            status.setStatus( statusPos, statusLine );
            transport.close();

            // Clean up when finished
            attachments.removeTempDocs();

            return true;
        }
        catch( MessagingException me )
        {
            if( statusPos == 10 )
            {
                statusLine = "Error connecting (User authentication?)";
            }
            status.setStatus( statusPos, statusLine );
            System.out.println( "Error sending message: ");
            me.printStackTrace();
            return false;
        }

    }

}
