package com.dragonsoft.tryapp.common;

import java.io.Serializable;
import java.util.Date;
import java.util.LinkedList;
import java.util.List;
import java.util.ListIterator;

/**
 * Represents an assignment.
 */
public class AssignmentObj implements Serializable {

    /*---- NON-OPTIONAL FIELDS ----*/

    /**
     * Unique identifier of this assignment across all parts of the system.
     */
    private String strAssignmentID;

    private String strAssignmentName;

    private Date assignmentStartTime;

    private Date assignmentDeadline;

    private boolean lateDeadlineGiven;

    private boolean assignmentViewableByStudents;

    private boolean assignmentHasActiveActivities;

    /*---- OPTIONAL FIELDS ----*/

    private Date assignmentLateDeadline;

    private List activities;

    public AssignmentObj(String assignmentID, String assignmentName,
            Date startTime, Date deadline) {

        strAssignmentID = assignmentID;
        strAssignmentName = assignmentName;
        assignmentStartTime = startTime;
        assignmentDeadline = deadline;

        lateDeadlineGiven = false;
        assignmentLateDeadline = null;
        activities = new LinkedList();

        // assume to be true by default
        assignmentViewableByStudents = true;
        assignmentHasActiveActivities = true;
    }

    public AssignmentObj(String assignmentID, String assignmentName,
            Date startTime, Date deadline, Date lateDeadline) {

        this(assignmentID, assignmentName, startTime, deadline);

        assignmentLateDeadline = lateDeadline;
        lateDeadlineGiven = true;
    }

    public String getAssignmentID() {
        return (strAssignmentID);
    }

    public void setAssignmentName(String assignmentName) {
        strAssignmentName = assignmentName;
    }

    public String getAssignmentName() {
        return (strAssignmentName);
    }

    public void setStartingTime(Date startTime) {
        assignmentStartTime = startTime;
    }

    public Date getStartingTime() {
        return (assignmentStartTime);
    }

    public void setDeadline(Date deadline) {
        assignmentDeadline = deadline;
    }

    public Date getDeadline() {
        return (assignmentDeadline);
    }

    public void setLateDeadline(Date lateDeadline) {
        assignmentLateDeadline = lateDeadline;
        lateDeadlineGiven = true;
    }

    public boolean hasLateDeadline() {
        return (lateDeadlineGiven);
    }

    public Date getLateDeadline() {
        return (assignmentLateDeadline);
    }

    public void addActivity(ActivityObj activity) {
        activities.add(activity);
    }

    public List getActivities() {
        return (activities);
    }

    public List getActiveActivities() {

        List returnValue = new LinkedList();

        ListIterator activityIterator = activities.listIterator();
        ActivityObj currentActivity;
        while (activityIterator.hasNext()) {
            currentActivity = (ActivityObj) activityIterator.next();

            if (currentActivity.isActive()) {
                returnValue.add(currentActivity);
            }
        }

        return (returnValue);
    }

    public boolean viewableByStudents() {
        return (assignmentViewableByStudents);
    }

    public boolean hasActiveActivities() {
        return (assignmentHasActiveActivities);
    }

    public String toString() {

        StringBuffer buffer = new StringBuffer();
        buffer.append("ID=").append(this.strAssignmentID).append(
                ",AssignmentName=").append(this.strAssignmentName).append(
                ",Activities[");
        for (int i = 0; i < this.activities.size(); i++) {
            buffer.append(this.activities.get(i)).append(",");
        }
        buffer.append("]");
        return buffer.toString();
    }

} // AssignmentObj