using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ProjectBus.CollectionGenericObject;

    /// <summary>
    /// Интерфейс описания действий для набора хранимых объектов
    /// </summary>
    /// <typeparam name="T">Параметр: ограничение - ссылочный тип</typeparam>
    public interface ICollectionGenericObjects<T>
        where T : class
    {
        /// <summary>
        /// Количество объектов в коллекции
        /// </summary>
        int Count { get; }

        /// <summary>
        /// Установка максимального количества элементов
        /// </summary>
        int SetMaxCount { set; }

        /// <summary>
        /// Добавление объекта в коллекцию
        /// </summary>
        /// <param name="obj">Добавляемый объект</param>
        /// <returns>true - вставка прошла удачно, false - вставка не удалась</returns>
        int Insert(T obj);

        /// <summary>
        /// Добавление объекта в коллекцию на конкретную позицию
        /// </summary>
        /// <param name="obj">Добавляемый объект</param>
        /// <param name="position">Позиция</param>
        /// <returns>true - вставка прошла удачно, false - вставка не удалась</returns>
        int Insert(T obj, int position);

        /// <summary>
        /// Удаление объекта из коллекции с конкретной позиции
        /// </summary>
        /// <param name="position">Позиция</param>
        /// <returns>true - удаление прошло удачно, false - удаление не удалось</returns>
        T? Remove(int position);

        /// <summary>
        /// Получение объекта по позиции
        /// </summary>
        /// <param name="position">Позиция</param>
        /// <returns>Объект</returns>
        T? Get(int position);
    }