package pt.utl.ist.scripts.dataTransferObject.equivalence;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

import net.sourceforge.fenixedu.domain.util.LogicOperator;

public class CurricularCourseEquivalencePlanEntryDTO extends EquivalencePlanEntryDTO {

    public class DegreeModuleInformationDTO {
        private String name;

        private String type;

        public DegreeModuleInformationDTO(final String name, final String type) {
            this.name = name;
            this.type = type;
        }

        public String getName() {
            return name;
        }

        public void setName(String name) {
            this.name = name;
        }

        public boolean isCurricularCourse() {
            return this.type.equalsIgnoreCase("CurricularCourse");
        }

        public boolean isCourseGroup() {
            return this.type.equalsIgnoreCase("CourseGroup");
        }

    }

    private List<String> oldCurricularCourses;

    private List<DegreeModuleInformationDTO> newDegreeModules;

    private String previousCourseGroup;

    private LogicOperator newCurricularCoursesOperator;

    private LogicOperator sourceCurricularCoursesOperator;

    private Double ectsCredits;

    public CurricularCourseEquivalencePlanEntryDTO() {
        this.oldCurricularCourses = new ArrayList<String>();
        this.newDegreeModules = new ArrayList<DegreeModuleInformationDTO>();
    }

    public List<String> getOldCurricularCourses() {
        return Collections.unmodifiableList(oldCurricularCourses);
    }

    public void addOldCurricularCourse(final String name) {
        this.oldCurricularCourses.add(name);
    }

    public List<DegreeModuleInformationDTO> getNewDegreeModules() {
        return Collections.unmodifiableList(newDegreeModules);
    }

    public void addNewDegreeModule(final String name, final String type) {
        this.newDegreeModules.add(new DegreeModuleInformationDTO(name, type));
    }

    public String getPreviousCourseGroup() {
        return previousCourseGroup;
    }

    public void setPreviousCourseGroup(String previousCourseGroup) {
        this.previousCourseGroup = previousCourseGroup;
    }

    public LogicOperator getNewCurricularCoursesOperator() {
        return newCurricularCoursesOperator;
    }

    public void setNewCurricularCoursesOperator(LogicOperator newCurricularCoursesOperator) {
        this.newCurricularCoursesOperator = newCurricularCoursesOperator;
    }

    public Double getEctsCredits() {
        return ectsCredits;
    }

    public void setEctsCredits(Double ectsCredits) {
        this.ectsCredits = ectsCredits;
    }

    public LogicOperator getSourceCurricularCoursesOperator() {
        return sourceCurricularCoursesOperator;
    }

    public void setSourceCurricularCoursesOperator(LogicOperator sourceCurricularCoursesOperator) {
        this.sourceCurricularCoursesOperator = sourceCurricularCoursesOperator;
    }

    @Override
    public boolean isCurricularCourseEntry() {
        return true;
    }

}
