package jp.co.y_net.amm;


import jp.co.y_net.amm.common.AppLogger;
import jp.co.y_net.amm.dao.GrpDao;
import jp.co.y_net.amm.dao.GrpusrDao;
import jp.co.y_net.amm.dao.InfDao;
import jp.co.y_net.amm.dao.Org;
import jp.co.y_net.amm.dao.OrgDao;
import jp.co.y_net.amm.dao.PwtcktDao;
import jp.co.y_net.amm.dao.Usr;
import jp.co.y_net.amm.dao.UsrDao;

import org.springframework.context.support.ClassPathXmlApplicationContext;

import com.mchange.v2.async.ThreadPoolAsynchronousRunner;

public class Test {
    public static void main(String[] args) {
        System.setProperty("catalina.base", "C:\\tmp");

        ClassPathXmlApplicationContext context =
                new ClassPathXmlApplicationContext("applicationContextBase.xml", "hibernateContextBase.xml");

        UsrDao usrDao = (UsrDao)context.getBean("usrDao");
        OrgDao orgDao = (OrgDao)context.getBean("orgDao");
        PwtcktDao pwtcktDao = (PwtcktDao)context.getBean("pwtcktDao");
        InfDao infDao = (InfDao)context.getBean("infDao");
        GrpDao grpDao = (GrpDao)context.getBean("grpDao");
        GrpusrDao grpusrDao = (GrpusrDao)context.getBean("grpusrDao");
        
//        Pwtckt cnd = new Pwtckt();
//        pwtcktDao.get(cnd);
        
        //test1(usrDao, orgDao);
        
//        Integer nextId = orgDao.getNextOrgId();
//        System.out.println(nextId);
//        

//        Usr usr = new Usr();
//        usr.setName("test");
//        usrDao.add(usr);
        
//        Grp grp = new Grp();
//        grp.setName("test");
//        grpDao.add(grp);
        
//        List<Grp> grps = grpDao.get();
//        for(Grp g: grps) {
//            System.out.println(g.getName());
//        }
        
        System.out.println(usrDao.getNextId("Usr", "usrid"));
        System.out.println(orgDao.getNextId("Org", "orgid"));
//        System.out.println(pwtcktDao.getNextId(
//        System.out.println(infDao.getNextId(
        System.out.println(grpDao.getNextId("Grp", "grpid"));
        System.out.println(grpusrDao.getNextId("Grpusr", "grpusrid"));

        ThreadPoolAsynchronousRunner t = new ThreadPoolAsynchronousRunner(0, false);
    }

    private static void test1(UsrDao usrDao, OrgDao orgDao) {
        Usr usr = usrDao.getByUsrid(1);
        System.out.println(usr.getName());
        
        
        /* まだ使用されていないメールアドレスであることをチェック */
        String mail = "other@example.com2";
        int usrId = 21;
        
        
        
        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() + "が同一のメールアドレスだが退会済み");
            } else if (u.getUsrid() == usrId) {
                AppLogger.debug(u.getName() + "自分自身のデータ");
            } else {
                AppLogger.debug(u.getName() + "が同一のメールアドレス");
                exist = true;
            }
        }
        
        if(exist == false) {
            Org cndOrg = new Org();
            cndOrg.setMail(mail);
            for(Org o: orgDao.get(cndOrg)) {
                
                // TODO 機関管理者の場合、自分のメールアドレスがヒットする可能性が有ることを考慮
                
                AppLogger.debug(o.getName() + "が同一のメールアドレス");
                exist = true;
            }
        }
        
        System.out.println(exist);
        
        
        /* ログインIDが有効であることをチェック */
    }
}
