package com.bizofficer.apiweb.selftestopt;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;

import javax.sql.DataSource;

import org.apache.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.crossstore.ChangeSetPersister.NotFoundException;
import org.springframework.stereotype.Service;

import com.bizofficer.pojo.response.ListResponsePojo;
import com.bizofficer.util.module.MysqlTableNames;



@Service
public class SelfTestOptionsService{
	
	private static final Logger logger = Logger.getLogger(SelfTestOptionsService.class);
	
	@Autowired
    DataSource appDataSource;
    Connection conn;
    PreparedStatement ps;
    ResultSet rs;
	
	public Object doExecute(Object obj) throws NotFoundException{
		BeanTQT objBean = (BeanTQT) obj; 	
		ListResponsePojo responseObj = new ListResponsePojo();
		
		try {
			
			responseObj.setResponseTxt("failed");
			
			if(objBean.getOrganisationId()==null || objBean.getTemplateId()==null) {
				return responseObj;
			}

			List<SelfTestOptionsResponseBean> dataList = new ArrayList<SelfTestOptionsResponseBean>();
			
			SelfTestOptionsResponseBean responseBeanObj = new SelfTestOptionsResponseBean();
			
			this.conn = this.appDataSource.getConnection();
            if (this.conn != null) {
            	
            	this.ps = this.conn.prepareStatement("SELECT self_test_id FROM "+MysqlTableNames.getSelfTestActive()+" where organisation_id=?");
                this.ps.setInt(1, objBean.getOrganisationId());
                logger.info("findSelftestOptions query 1:" + ps);
                this.rs = ps.executeQuery();
                if (this.rs.next()) {
                    PreparedStatement ps1 = this.conn.prepareStatement("SELECT total_no_of_ques,duration,marks_correct_ans,marks_incorrect_ans,marks_not_ans FROM "+MysqlTableNames.getSelfTestManagement()+" WHERE self_test_id=?");
                    ps1.setInt(1, rs.getInt("self_test_id"));
                    logger.info("findSelftestOptions query 2:" + ps1);
                    ResultSet rs1 = ps1.executeQuery();
                    if (rs1.next()) {
                    	responseBeanObj.setDuration(rs1.getInt("duration"));
                    	responseBeanObj.setTotalQuestions(rs1.getInt("total_no_of_ques"));
                    	responseBeanObj.setMarksCorrectAns(rs1.getDouble("marks_correct_ans"));
                    	responseBeanObj.setMarksIncorrectAns(rs1.getDouble("marks_incorrect_ans"));
                    	responseBeanObj.setMarksNotAnswer(rs1.getDouble("marks_not_ans"));
                    }
                    rs1.close();
                    ps1.close();
                }
                rs.close();
                ps.close();               

    			List<QuestionTypeBean> questionTypeBeanList = new ArrayList<QuestionTypeBean>();
    			QuestionTypeBean questionTypeBeanObj = null;
                
                logger.info("Repository  Imple: getTemplateQuestionType");
                ps = this.conn.prepareStatement("SELECT type_id,type_title FROM "+MysqlTableNames.getTemplateQuestionType()+" where template_id=? and exam_type=1 and status='Active'");
                ps.setInt(1, objBean.getTemplateId());
                logger.info("template question type query: " + ps);
                rs = ps.executeQuery();
                while (rs.next()) {
                	questionTypeBeanObj = new QuestionTypeBean();
                	questionTypeBeanObj.setTypeId(rs.getString("type_id"));
                	questionTypeBeanObj.setTypeTitle(rs.getString("type_title"));                    
                    questionTypeBeanList.add(questionTypeBeanObj);
                }
                rs.close();
                ps.close();
                this.conn.close();
                
                responseBeanObj.setQuestionTypeList(questionTypeBeanList);
                
                dataList.add(responseBeanObj);
                
            }
            
            
            responseObj.setList(dataList);
			
			responseObj.setResponseTxt("success");
			
			
		}catch(Exception e) {
			e.getStackTrace();
		}
		
		////logger.info( "dataList >>> " +  dataList );
			
		return responseObj;
	}
	

	
}
