package pt.utl.ist.scripts.runOnce.credits;

import java.math.BigDecimal;

import net.sourceforge.fenixedu.domain.ExecutionSemester;
import net.sourceforge.fenixedu.domain.ExecutionYear;
import net.sourceforge.fenixedu.domain.TeacherCredits;
import net.sourceforge.fenixedu.domain.TeacherCreditsState;
import net.sourceforge.fenixedu.domain.credits.AnnualCreditsState;
import net.sourceforge.fenixedu.domain.credits.AnnualTeachingCredits;
import pt.utl.ist.scripts.commons.AtomicScript;

public class CreateFirstAnnualTeachingCredits extends AtomicScript {

    public static void main(String[] args) {
        logger.info("Starting the process...");
        processWriteTransaction(new CreateFirstAnnualTeachingCredits());
        logger.info("Process finalized");
        System.exit(0);
    }

    @Override
    protected void run() throws Exception {
        ExecutionSemester executionSemester = ExecutionSemester.readBySemesterAndExecutionYear(2, "2010/2011");
        int totalEmpty = 0;
        ExecutionYear executionYear = executionSemester.getExecutionYear();

        AnnualCreditsState annualCreditsState = new AnnualCreditsState(executionYear);
        annualCreditsState.setIsCreditsClosed(true);

        if (executionSemester != null) {
            TeacherCreditsState teacherCreditsState = TeacherCreditsState.getTeacherCreditsState(executionSemester);
            if (teacherCreditsState != null) {
                for (TeacherCredits teacherCredits : teacherCreditsState.getTeacherCredits()) {
                    if (isEmptyTeacherCredits(teacherCredits)) {
                        System.out.println("Erro empty teacherCredits" + teacherCredits.getTeacher().getTeacherId());
                        totalEmpty++;
                    } else {
                        if (teacherCredits.getTeacher().getTeacherId() == null) {
                            System.out.println("Erro sem teacher " + teacherCredits.getTeacher().getPerson().getName() + " "
                                    + teacherCredits.getTotalCredits() + " " + teacherCredits.getBalanceOfCredits());
                        } else {
                            AnnualTeachingCredits annualTeachingCredits =
                                    new AnnualTeachingCredits(teacherCredits.getTeacher(), annualCreditsState);
                            annualTeachingCredits.setAccumulatedCredits(teacherCredits.getBalanceOfCredits().add(
                                    (teacherCredits.getTotalCredits().subtract(teacherCredits.getMandatoryLessonHours()))));
                            annualTeachingCredits.setAnnualCreditsState(annualCreditsState);
                        }
                    }
                }
            } else {
                System.out.println("Erro empty teacherCreditsState");
            }
        } else {
            System.out.println("Erro empty semester");
        }

        System.out.println("totalEmpty: " + totalEmpty);

        System.out.println("DONE!");
    }

    private boolean isEmptyTeacherCredits(TeacherCredits teacherCredits) {
        return teacherCredits.getTotalCredits().equals(BigDecimal.ZERO)
                && teacherCredits.getBalanceOfCredits().equals(BigDecimal.ZERO);
    }
}
