package com.lucifer.rnmail;

import android.text.TextUtils;

import com.sun.mail.imap.IMAPFolder;
import com.sun.mail.imap.IMAPStore;

import java.util.Properties;

import javax.mail.MessagingException;
import javax.mail.Session;

//只有内部类可以为static。
public class MailClient {

    private IMAPStore store = null;
    private Session mailsession = null;

    public String imapserver;

    public String mailAccount;

    public String getMailAccount() {
        return mailAccount;
    }

    public void setMailAccount(String mailAccount) {
        if (this.mailAccount != mailAccount && !TextUtils.isEmpty(this.mailAccount)) {
            this.clearStore();
        }
        this.mailAccount = mailAccount;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public String password;

    //在自己内部定义自己的一个实例，只供内部调用
    private static final MailClient instance = new MailClient();

    private MailClient() {
        super();

    }

    //这里提供了一个供外部访问本class的静态方法，可以直接访问
    public static MailClient getInstance() {
        return instance;
    }

    public IMAPStore getConnectedStore() {
        if (store == null) {
            initStore();
        }
        if (!store.isConnected()) {
            try {
                store.connect(imapserver, mailAccount, password);
            } catch (MessagingException ex) {
                ex.printStackTrace();
            }
        }
        return store;
    }

    private void initStore() {
        final String SSL_FACTORY = "javax.net.ssl.SSLSocketFactory";// 获取默认会话
        Properties prop = System.getProperties();
        prop.put("mail.imap.host", imapserver);
        prop.setProperty("mail.imap.ssl.enable", "true");
        prop.setProperty("mail.smtp.socketFactory.class", SSL_FACTORY);
        prop.put("mail.imap.auth.plain.disable", "true");
        Session mailsession = Session.getInstance(prop, null);
        mailsession.setDebug(false); //是否启用debug模式
        try {
            store = (IMAPStore) mailsession.getStore("imaps");
        } catch (MessagingException ex) {
            ex.printStackTrace();
        }
    }

    public String getImapserver() {
        return imapserver;
    }

    public void setImapserver(String imapserver) {
        this.imapserver = imapserver;
    }

    private void clearStore() {
        if (store != null) {
            try {
//                store.close();
            } catch (Exception e) {

            }

        }
    }
}