package jp.co.y_net.amm.service;

import jp.co.y_net.amm.common.AppLogger;
import jp.co.y_net.amm.dao.Org;
import jp.co.y_net.amm.dao.OrgDao;
import jp.co.y_net.amm.dao.Usr;
import jp.co.y_net.amm.dao.UsrDao;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Component;

@Component("mailAddressCheck")
public class MailAddressCheck {
    
    @Autowired(required = true)
    @Qualifier("usrDao")
    protected UsrDao usrDao;
    
    @Autowired(required = true)
    @Qualifier("orgDao")
    protected OrgDao orgDao;
    
    public boolean exist(String mail) {
        return exist(mail, null, true);
    }
    
    public boolean existWithoutOrg(String mail) {
        return exist(mail, null, false);
    }
    /**
     * @param mail 
     * @param myUsrid 
     * @param checkOrg 申請中のOrgもチェック対象に入れる場合はTrueを指定する。
     * @return
     */
    private boolean exist(String mail, Integer myUsrid, boolean checkOrg) {
        
        boolean exist = false;
        Usr cndUsr = new Usr();
        cndUsr.setLoginid(mail);
        for(Usr u: usrDao.get(cndUsr)) {
            if(u.getStatus().equals(Usr.STATUS_退会)) {
                // 無視
                AppLogger.debug(u.getName() + "が同一のメールアドレスだが退会済み");
                continue;
            }
            
            if (myUsrid != null && u.getUsrid() == myUsrid) {
                AppLogger.debug(u.getName() + "自分自身のデータ");
                continue;
            }
            
            AppLogger.debug(u.getName() + "が同一のメールアドレス");
            exist = true;
            break;
        }
        
        if(checkOrg) {
            if(exist == false) {
                /* 申請中の組織に同一のメールアドレスが存在指定はいけない */
                Org cndOrg = new Org();
                cndOrg.setMail(mail);
                cndOrg.setStatus(Org.STATUS_未処理);
                for(Org o: orgDao.get(cndOrg)) {
                    AppLogger.debug(o.getName() + "が同一のメールアドレス");
                    exist = true;
                    break;
                }
            }
        }
        
        return exist;
    }


}
