public class OutgoingLine {

    private int ID;
    private int messagesLost;
    private int messagesSent;
    private double sendTime;  // time to send a message
    private double whenDone;

    public OutgoingLine(int theID, double serviceTime ) {
        ID = theID;
        messagesLost = 0;
        messagesSent = 0;
        sendTime = serviceTime;
        whenDone = 0.0;
    }

    public int getID( ) { return ID; }
    public int getMessagesLost( ) { return messagesLost; }
    public int getMessagesSent( ) { return messagesSent; }
    public double getSendTime( ) { return sendTime; }
    public double getUtilization( ) {
       return (messagesSent == 0)? 0.0: messagesSent*sendTime/whenDone; 
    } 


    public boolean isBusy(double time ) {
       return (whenDone <= time) ? false : true;
    }

    public Event sendMessage(double time) {
        if (time < whenDone) { // can't handle this message
            messagesLost++;
            return null;
        }
        messagesSent++;
        whenDone = time + sendTime;
        return new Event(ID, Event.MSG_SENT, whenDone);
    }


    public String toString( ) {
        return "Outgoing[" + ID + "]: line speed=" + sendTime +
               ", msgs sent=" + messagesSent +
               ", msgs lost=" + messagesLost +
               ", utilization=" + getUtilization(); 

    }

}


