public class CallGenerator {
    /** macierzyste centrum obsługi */
    private final CallCenter _callCenter;

    /** ogólna liczba zgłoszeń do wygenerowania */
    private final int _numberOfCalls;

    /** maksymalny czas obsługi zgłoszenia */
    private final int _maxCallDuration;

    /** maksymalny odstęp czasowy między kolejnymi zgłoszeniami */
    private final int _maxCallInterval;

    /**
     * Konstruktor.
     * parametry: 
     *     macierzyste centrum obsługi 
     *     liczba zgłoszeń do wygenerowania
     *     maksymalny czas obsługi zgłoszenia
     *     maksymalny odstęp czasowy między kolejnymi zgłoszeniami
     */
    public CallGenerator(CallCenter callCenter, 
                         int numberOfCalls, 
                         int maxCallDuration, 
                         int maxCallInterval) {
        assert callCenter != null : "nie określono macierzystego centrum obsługi";
        assert numberOfCalls > 0 :  "liczba zgłoszeń musi być dodatnia";
        assert maxCallDuration > 0 : "czas obsługi zgłoszenia musi być dodatni";
        assert maxCallInterval > 0 : "czas między zgłoszeniami musi być dodatni";

        _callCenter = callCenter;
        _numberOfCalls = numberOfCalls;
        _maxCallDuration = maxCallDuration;
        _maxCallInterval = maxCallInterval;
    }



    public void generateCalls() {
        for (int i = 0; i < _numberOfCalls; ++i) {
            sleep();
            _callCenter.accept(new Call(i, (int) (Math.random() * _maxCallDuration)));
        }
    }
    private void sleep() {
        try {
            Thread.sleep((int) (Math.random() * _maxCallInterval));
        } catch (InterruptedException e) {
            // Ignoruj
        }
    }







}
