package jp.agentec.sinaburocast.service;

import java.util.List;

import jp.agentec.sinaburocast.entity.EnqueteSummary;
import jp.agentec.sinaburocast.form.admin.enquete.EnqueteResultForm;

import org.seasar.extension.jdbc.AutoSelect;
import org.seasar.extension.jdbc.where.SimpleWhere;
import org.seasar.framework.container.annotation.tiger.Component;
import org.seasar.framework.container.annotation.tiger.InstanceType;
import org.seasar.framework.util.StringUtil;

@Component(instance=InstanceType.SINGLETON)
public class EnqueteSummaryService extends AbstractService<EnqueteSummary> {

    
	public static final String ID_SEQ_NAME = "enquete_summary_id_seq";

	/**
	 * IDを発行して、登録する。
	 */
	public int insertEnqueteSummary(EnqueteSummary enqueteSummary, String insId) {
		enqueteSummary.enqueteSummaryId =
			getSeqNextVal(Integer.class, ID_SEQ_NAME);
		return super.insert(enqueteSummary, insId);
	}
	
	
	public EnqueteSummary findById(Integer enqueteSummaryId) {
        return select().id(enqueteSummaryId).getSingleResult();
    }

    public List<EnqueteSummary> findAllOrderById() {
        return select().orderBy("enqueteSummaryId asc").getResultList();
    }
    
    public List<EnqueteSummary> findAllByEnqueteId(String eid) {
        return select().where(new SimpleWhere().eq("enqueteId",eid)).getResultList();
    }
    
    /**
     * 指定したアンケートIDでアンケートサマリーを検索する。
     * 
     * @param eid アンケートID
     * @return
     */
    public EnqueteSummary findByEnqueteId(Integer eid) {
        return select().where(new SimpleWhere().eq("enqueteId",eid)).orderBy("insertDate desc").limit(1).getSingleResult();
    }
    
    /**
     * アンケート検索画面で削除ボタンを押した場合。
     * @param eid アンケートID
     * @return
     */
    public int deleteByEnqueteId(String eid){
    	List<EnqueteSummary> list = findAllByEnqueteId(eid);
    	if(!list.isEmpty()){
    		jdbcManager.deleteBatch(list).execute();
    	}
    	
    	return 0;
    }
    
    /**
     * 集計結果を取得する。アンケートIDで取得
     * @return
     */
    public List<EnqueteSummary> getEnqueteSummary(EnqueteResultForm enqueteResultForm){
    	if(StringUtil.isNumber(enqueteResultForm.eid+"")){
	    	AutoSelect<EnqueteSummary> autoSelect = select().innerJoin("enquete").where(new SimpleWhere().eq("enqueteId", Integer.parseInt(enqueteResultForm.eid)));
	    	enqueteResultForm.setPaging(null, enqueteResultForm.pageNo, autoSelect.getCount());
	    	return  select().innerJoin("enquete").where(new SimpleWhere().eq("enqueteId", Integer.parseInt(enqueteResultForm.eid))).orderBy("insertDate  desc")
	    			.offset(enqueteResultForm.getOffSet("")).limit(enqueteResultForm.getLimit("")).    			
	    			getResultList();
    	}else{
    		AutoSelect<EnqueteSummary> autoSelect = select().innerJoin("enquete");
	    	enqueteResultForm.setPaging(null, enqueteResultForm.pageNo, autoSelect.getCount());
	    	return  select().innerJoin("enquete").orderBy("insertDate  desc")
	    			.offset(enqueteResultForm.getOffSet("")).limit(enqueteResultForm.getLimit("")).    			
	    			getResultList();
    		
    	}
    }
    
    /**
     * アンケートIdで削除を行う。
     * @param eid
     * @return
     */
    public int deleteByEnqueteId(Integer eid){
    	return jdbcManager.updateBySql("delete from t_enquete_summary where enquete_id = ? ",Integer.class).params(eid).execute();
    }
    
    /**
     * アンケート集計結果を登録する。「アンケートごとに1レコード」
     * @param enqueteSummary
     * @param insId
     * @return
     */
    public int deleteInsert(EnqueteSummary enqueteSummary,String insId){
    	this.deleteByEnqueteId(enqueteSummary.enqueteId);
    	return this.insertEnqueteSummary(enqueteSummary, insId);
    }
    
    
    
    
    
}