package pt.utl.ist.scripts.process.updateData;

import java.util.Iterator;

import net.sourceforge.fenixedu.domain.Degree;
import net.sourceforge.fenixedu.domain.UnitBoardPermittedGroupType;
import net.sourceforge.fenixedu.domain.accessControl.CurrentDegreeCoordinatorsGroup;
import net.sourceforge.fenixedu.domain.accessControl.RoleTypeGroup;
import net.sourceforge.fenixedu.domain.messaging.UnitAnnouncementBoard;
import net.sourceforge.fenixedu.domain.organizationalStructure.Unit;
import net.sourceforge.fenixedu.domain.person.RoleType;
import pt.ist.bennu.core.domain.Bennu;
import pt.utl.ist.fenix.tools.util.i18n.Language;
import pt.utl.ist.fenix.tools.util.i18n.MultiLanguageString;
import pt.utl.ist.scripts.commons.AtomicScript;

public class CreateDegreeBoards extends AtomicScript {

    public static void main(String[] args) {
        processWriteTransaction(new CreateDegreeBoards());
    }

    @Override
    protected void run() throws Exception {
        // HACK: to avoid bug that occurs when a group builder tries to read all
        // roles during the materialization of another relation
        Iterator iterator = Bennu.getInstance().getRolesSet().iterator();

        for (Degree degree : Degree.readNotEmptyDegrees()) {
            Unit unit = degree.getUnit();

            if (unit != null) {
                if (!unit.hasAnyBoards()) {
                    System.out.println(String.format("Creating board for: %s", unit.getNameWithAcronym()));

                    UnitAnnouncementBoard board = new UnitAnnouncementBoard(unit);
                    board.setMandatory(false);

                    board.setName(new MultiLanguageString().with(Language.pt, "Anúncios"));
                    board.setReaders(null);
                    board.setWriters(new CurrentDegreeCoordinatorsGroup(degree));
                    board.setManagers(new RoleTypeGroup(RoleType.MANAGER));
                    board.setUnitPermittedReadGroupType(UnitBoardPermittedGroupType.UB_PUBLIC);
                    board.setUnitPermittedWriteGroupType(UnitBoardPermittedGroupType.UB_CURRENT_DEGREE_COORDINATOR);
                    board.setUnitPermittedManagementGroupType(UnitBoardPermittedGroupType.UB_MANAGER);
                }
            }
        }

        System.out.println(iterator);
    }

}
