package outgoinglinepkg;
public class OutgoingLine {

    private int ID;
    private int messagesLost;
    private int messagesSent;
    private double sendTime;  // time to send a message
    private double whenDone;
    private boolean isBusy;

    public OutgoingLine(int theID, double serviceTime ) {
        ID = theID;
        messagesLost = 0;
        messagesSent = 0;
        sendTime = serviceTime;
        whenDone = 0.0;
        isBusy = false;
    }

    public int getID( ) { return ID; }
    public int getMessagesLost( ) { return messagesLost; }
    public int getMessagesSent( ) { return messagesSent; }
    public double getSendTime( ) { return sendTime; }
    public void setBusy(){ isBusy = true; }
    public void setFree() { isBusy = false; }
    public double getUtilization( ) {
       return (messagesSent == 0)? 0.0: messagesSent*sendTime/whenDone;
    }

    public boolean lineBusy( ) {
      return isBusy == true;
    }

    public Event sendMessage(double time) {
      // Debug System.out.println("Trying to send at time " + time );
        if (lineBusy() ) { // 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();

    }

}


