/* elevator.h
 */

#ifndef ELEVATOR_H
#define ELEVATOR_H

#include "list.H"
#include "main.H"

class Person;
class Floor;
class Controller;
class Lnode;
class List;


class Elevator {

public:

    void   add_person( Person *pers );
    void   remove_person( Person *pers );
    int    space_left();
    int    index();
    int    is_a_destination( Floor *floor );
    void   handle_arrival_at_floor( Floor *floor );
    void   handle_departure_from_floor();
    void   draw( float x, float y, float z );
    float  floor_position();
    
    void   print() { cout << this->index(); };
    
    void init( int max_capacity, Floor *init_floor, int i, float accel ) {
	elev_num = i;
	capacity = max_capacity;
	accel_rate = accel;
	last_floor = init_floor;
	next_floor = init_floor;
	departure_time = current_time;
    }
    
private:
    
    friend class Controller;
	// let the Controller class set/inspect private variables
    
    List occupants;	// persons inside elevator
    Floor *last_floor;	// most recently visited floor
    float departure_time;// time of departure from last_floor
    Floor *next_floor;	// next floor to visit
    int   capacity;	// number of additional people the elevator can hold
    int   elev_num;	// this elevator index
    float accel_rate;	// rate of acceleration

    void signal_arrival_to_occupants();
};

#endif
