/*
* Copyright (c) 2007 Nokia Corporation and/or its subsidiary(-ies). 
* All rights reserved.
* This component and the accompanying materials are made available
* under the terms of "Eclipse Public License v1.0"
* which accompanies this distribution, and is available
* at the URL "http://www.eclipse.org/legal/epl-v10.html".
*
* Initial Contributors:
* Nokia Corporation - initial contribution.
*
* Contributors:
*
* Description: This file defines class CIpsPlgSmtpService.
 *
*/


#ifndef IPSPLGSMTPSERVICE_H
#define IPSPLGSMTPSERVICE_H

class CIpsPlgSosBasePlugin;
class CIpsPlgMsgMapper;

/**
 *  Freestyle message send and creation implementation
 *  
 *  Encapsulates message creation and send operations using
 *  Symbian os smtp services.
 *
 *
 *  @lib ipssosplugin.lib
 *  @since FS 1.0
 */
NONSHARABLE_CLASS( CIpsPlgSmtpService ) : public CBase
    {

public:

    /**
     * Symbian 2nd phase construcror
     *
     * @since FS 1.0
     * @return None
     */
    IMPORT_C static CIpsPlgSmtpService* NewL(
        CMsvSession& aSession,
        CIpsPlgSosBasePlugin& aPlugin );

    /**
     * Symbian 2nd phase construcror
     *
     * @since FS 1.0
     * @return None
     */
    IMPORT_C static CIpsPlgSmtpService* NewLC( 
        CMsvSession& aSession,
        CIpsPlgSosBasePlugin& aPlugin );

    /**
     * Class destructor
     *
     * @since FS 1.0
     * @return None
     */
    virtual ~CIpsPlgSmtpService();

    /**
     * Stores message to symbian message store
     *
     * @param aMailboxId id for corresponding mailbox
     * @param aMessage FS Email message object
     * @param aSession MsvSession
     * @since FS 1.0
     */
    void StoreMessageL(
        TFSMailMsgId aMailBoxId,
        CFSMailMessage& aMessage );

    /**
     * Creates new email message to message store
     *
     * @param aMailBoxId msv entry id to mailbox which setting are used
     * @param aSession Msv Session
     * @since FS 1.0
     * @return pointer created fs message object
     */
    CFSMailMessage* CreateNewSmtpMessageL(
        const TFSMailMsgId& aMailBoxId );

    CFSMailMessage* CreateForwardSmtpMessageL(
        const TFSMailMsgId& aMailBoxId,
        const TFSMailMsgId& aOriginalMessageId );

    CFSMailMessage* CreateReplySmtpMessageL(
        const TFSMailMsgId& aMailBoxId,
        const TFSMailMsgId& aOriginalMessageId,
        TBool aReplyToAll );

protected:

    /**
     * Class constructor
     *
     * @since FS 1.0
     * @return None
     */
    CIpsPlgSmtpService( CMsvSession& aSession,
                    CIpsPlgSosBasePlugin& aPlugin );

    /**
     * Constructor for leaving methods
     *
     * @since FS 1.0
     * @return None
     */
    void ConstructL();

private:

    /**
     * Combines alias and email address to one string
     * format : Alias<email_address>
     *
     * @since FS 1.0
     * @param TDesC& aAliasName alias
     * @param TDesC& aEmailName email address
     * @return result of combination
     */
    HBufC* CreateDisplayStringLC( const TDesC& aDisplayName, 
                              const TDesC& aEmailName );

    /**
     * Changes messages service id
     *
     * @since FS 1.0
     * @param aEntry Original message entry 
     * @return None
     */
    void ChangeServiceIdL( TMsvEntry& aEntry );
    
    /**
     * Changes messages service id to the given id
     *
     * @param aEntry message entry
     * @param aServiceId new service id
     * @return None
     */
    void ChangeServiceIdL( TMsvEntry& aEntry, TMsvId aServiceId );

    /**
     * Creates proper fs message object and set flags
     * to correspond orginal message flags
     *
     * @since FS 1.0
     * @param aMessageId id of created message
     * @param aOrginalMsgId id of orginal message
     * @param aMailboxId mailbox id
     * @return TMscId
     */
    CFSMailMessage* CreateFSMessageAndSetFlagsL(
       TMsvId aMessageId, TMsvId aOriginalMsgId, TMsvId aMailboxId );
    
    /**
     * Gets MsvId from msv operations final progress 
     * descriptor, leaves if msvId is null entry
     *
     * @since FS 1.0
     * @param aProg progress descriptor
     * @return TMscId
     */
    inline static TMsvId GetIdFromProgressL( const TDesC8& aProg );

    /**
     * Gets character set from original message
     * @param aOriginalMsgId id of original message
     * */
    TUid GetOriginalCharsetL( TMsvId aOriginalMsgId );
    
    /**
     * Sets the charset for outgoing messages 
     * @param aEntry message where the charset is to be set
     * @param aCharset the charset to be set
     */
    void SetCharactersetL( CMsvEntry& aEntry, TUid aCharset );
private: // data

    CIpsPlgSosBasePlugin& iPlugin;

    CMsvSession& iSession;
    
    CIpsPlgMsgMapper* iMsgMapper;

    };

#endif /* IPSPLGSMTPSERVICE_H*/

// End of File
