package org.springframework.prospring.ticket.domain.support;

import java.util.*;

import org.springframework.prospring.ticket.domain.*;

/**
 * Spektakl zawierający informacje o dostępnych miejscach.
 */
public class PerformanceWithAvailability extends Performance {

    // ilość miejsc dostępnych na ten spektakl.
    private int availableSeatCount;

    // lista obiektów PriceBandWithAvailabilaty dla tego spektaklu.
    private List priceBandWithAvailability;

	/**
     * Konstruktor - tworzy nowy obiekt spektaklu wraz z informacjami o dostępnych miejscach.
	 * @param id Identyfikator spektaklu.
	 * @param dateAndTime Data spektaklu.
	 * @param priceStructure Struktura cen dla spektaklu.
	 * @param show Przedstawienie.
	 */
	public PerformanceWithAvailability(
        long id,
        Date dateAndTime,
		PriceStructure priceStructure,
        Show show) {

        super(id, show, dateAndTime, priceStructure);
        this.availableSeatCount = 0;
        this.priceBandWithAvailability = new LinkedList();
	}

    public PerformanceWithAvailability(Performance performance) {
        super(performance.getId(), performance.getShow(), performance.getDateAndTime(), performance.getPriceStructure());
        availableSeatCount = 0;
        priceBandWithAvailability = new LinkedList();
    }

    /**
     * Zwraca ilość dostępnych miejsc na ten spektakl.
     * @return Ilość dostępnych miejsc na ten spektakl.
     */
    public int getAvailableSeatCount() {
		return availableSeatCount;
	}

    /**
     * Zwraca listę obiektów PriceBandWithAvailability dla danego spektaklu.
     * @return Lista obiektów PriceBandWithAvailability dla danego spektaklu.
     */
    public List getPriceBandWithAvailability() {
		return priceBandWithAvailability;
	}

    /**
     * Dodaje przekazany obiekt PriceBandWithAvailability do tego spektaklu.
     * @param priceBandWithAvailability Obiekt PriceBandWithAvailability, który należy dodać do tego spektaklu.
     */
    public void add(PriceBandWithAvailability priceBandWithAvailability) {
		this.availableSeatCount += priceBandWithAvailability.getAvailableSeatCount();
		this.priceBandWithAvailability.add(priceBandWithAvailability);
	}
}
