package com.wrox.algorithms.queues;

public final class CallCenterSimulator {
    /** liczba spodziewanych parametrów wywołania */
    private static final int NUMBER_OF_ARGS = 4;

    /** indeks parametru oznaczającego liczbę konsultantów */
    private static final int NUMBER_OF_AGENTS_ARG = 0;

    /** indeks parametru oznaczającego liczbę generowanych zgłoszeń */
    private static final int NUMBER_OF_CALLS_ARG = 1;

    /** indeks parametru oznaczającego maksymalny czas obsługi zgłoszenia */
    private static final int MAX_CALL_DURATION_ARG = 2;

    /** indeks parametru oznaczającego maksymalny odstęp czasowy 
     * między kolejnymi zgłoszeniami 
     */
    private static final int MAX_CALL_INTERVAL_ARG = 3;

    /**
     * Konstruktor prywatny, uniemożliwia samodzielne tworzenie instancji
     */
    private CallCenterSimulator() {
    }

public static void main(String[] args) {
        assert args != null : "nie podano parametrów";

        if (args.length != NUMBER_OF_ARGS) {
            System.out.println(
              "Wywołanie: CallGenerator <konsultanci><zgłoszenia>"
                               + "<czas obsługi> <odstęp czasowy>");
            System.exit(-1);
        }

        CallCenter callCenter = 
            new CallCenter(Integer.parseInt(args[NUMBER_OF_AGENTS_ARG]));

        CallGenerator callGenerator = 
           new CallGenerator(callCenter, 
                                 Integer.parseInt(args[NUMBER_OF_CALLS_ARG]),
                                 Integer.parseInt(args[MAX_CALL_DURATION_ARG]),
                                 Integer.parseInt(args[MAX_CALL_INTERVAL_ARG]));

        callCenter.open();
        try {
            callGenerator.generateCalls();
        } finally {
            callCenter.close();
        }
    }
}
