package performa.orm;

import java.util.Collection;
import oneit.logging.LogLevel;
import oneit.logging.LogMgr;
import oneit.logging.LoggingArea;
import oneit.objstore.StorageException;
import oneit.objstore.rdbms.filters.EqualsFilter;
import oneit.utils.filter.CollectionFilter;
import oneit.utils.filter.Filter;
import oneit.utils.parsers.FieldException;
import performa.orm.types.CriteriaType;


public class JobApplication extends BaseJobApplication
{
    private static final long   serialVersionUID    = 0L;
    public  static LoggingArea  LOG                 = LoggingArea.createLoggingArea("JobApplication");
    
    // This constructor should not be called
    public JobApplication ()
    {
        // Do not add any code to this, always put it in initialiseNewObject
    }

    
    public void initACAnswers()
    {
        for(CriteriaType ct: CriteriaType.getCriteriaTypeArray())
        {
            for(AssessmentCriteria ac: getJob().getAssessmentCriteraByType(ct))
            {
                AssessmentCriteriaAnswer    answer  = AssessmentCriteriaAnswer.createAssessmentCriteriaAnswer(getTransaction());

                try 
                {
                    answer.setJobApplication(this);
                    answer.setAssessmentCriteria(ac);
                } 
                catch (StorageException | FieldException ex) 
                {
                    LogMgr.log(LOG, LogLevel.PROCESSING1, "Error while preparing questions", this, answer);
                }
            }
        }
    }
    
    
    public void initCCAnswers()
    {
        //TODO
    }
    
    
    public Collection<AssessmentCriteriaAnswer> getACAnswersByType(CriteriaType criteria)
    {
        Filter  filter  = AssessmentCriteriaAnswer.SearchByCriteriaType()
                                                .andJobApplication(new EqualsFilter<>(this))
                                                .byCriteriaType(criteria);   

        return  CollectionFilter.filter(getAssessmentCriteriaAnswersSet(), filter);
    }

}