package pt.utl.ist.scripts.dataTransferObject;

import net.sourceforge.fenixedu.domain.student.RegistrationAgreement;

import org.joda.time.YearMonthDay;

import pt.utl.ist.fenix.tools.util.StringNormalizer;
import pt.utl.ist.scripts.domain.DegreeTranslation;

public class ExternalStudentDTO extends StudentDTO {

    private RegistrationAgreement agreement;

    @Override
    public boolean fillWithFileLineData(String dataLine) {

        if (dataLine.startsWith("IdentificationDocumentNumber") || dataLine.startsWith("N") || dataLine.startsWith("bi")) {
            return false;
        }

        String[] studentAttribute = dataLine.split("\t");

        if (studentAttribute.length > 6) {
            return importExternalStudent(studentAttribute);
        }

        if (studentAttribute.length == 6) {
            return importShortExternalStudent(studentAttribute);
        }

        return false;
    }

    private boolean importExternalStudent(String[] studentAttribute) {
        setIdentificationDocumentNumber(studentAttribute[0].trim());
        setStudentNumber(Integer.valueOf(StringNormalizer.normalize(studentAttribute[1].trim())) + 100000);
        setDegreeCode(DegreeTranslation.translateToFenixCode(StringNormalizer.normalize(studentAttribute[2].trim())));
        setYear(Integer.valueOf(StringNormalizer.normalize(studentAttribute[5].trim()).substring(0, 4)));
        setAgreement(RegistrationAgreement.valueOf(studentAttribute[6].trim()));
        // setStudentType(getStudentType(StringNormalizer.normalize(studentAttribute[7].trim())));
        //
        // return getStudentType() != null;

        return true;
    }

    private boolean importShortExternalStudent(String[] studentAttribute) {
        final String idDocumentNumber = StringNormalizer.normalize(studentAttribute[1].trim());
        if (idDocumentNumber.length() == 0) {
            return false;
        }
        setIdentificationDocumentNumber(idDocumentNumber);
        setStudentNumber(Integer.valueOf(StringNormalizer.normalize(studentAttribute[0].trim())) + 100000);
        setDegreeCode(DegreeTranslation.translateToFenixCode(StringNormalizer.normalize(studentAttribute[5].trim())));
        setYear(new YearMonthDay().getYear());
        // setStudentType(StudentType.EXTERNAL_STUDENT);

        return true;
    }

    // private StudentType getStudentType(String agreement) {
    //
    // // if (agreement.equals("1") || agreement.equals("2")) {
    // // return StudentType.EXTERNAL_STUDENT;
    // // }
    // //
    // // if (agreement.equals("4") || agreement.equals("6") ||
    // agreement.equals("8")) {
    // // return StudentType.FOREIGN_STUDENT;
    // // }
    //
    // return null;
    // }

    public RegistrationAgreement getAgreement() {
        return agreement;
    }

    public void setAgreement(RegistrationAgreement agreement) {
        this.agreement = agreement;
    }

}
