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

namespace GreenTree.Nachtragsmanagement.Services.Site
{
    public interface ISiteService
    {
        #region Site

        /// <summary>
        /// Gets all sites
        /// </summary>
        IList<Core.Domain.Site.Site> GetAllSites();

        /// <summary>
        /// Gets all sites where the user is assigned to if the current role only allows assigned sites
        /// </summary>
        IList<Core.Domain.Site.Site> GetAllUserAssignedSites(Core.Domain.User.User user);

        /// <summary>
        /// Gets a site by specified Id
        /// </summary>
        /// <param name="id">Site identifier.</param>
        Core.Domain.Site.Site GetSiteById(int id);

        /// <summary>
        /// Gets all sites to the specified ids
        /// </summary>
        IList<Core.Domain.Site.Site> GetSitesByIds(int[] ids);

        /// <summary>
        /// Gets a site by specified customer number
        /// </summary>
        /// <param name="customNumber">Customer number.</param>
        Core.Domain.Site.Site GetSiteByCustomNumber(string customNumber);

        /// <summary>
        /// Insert a site
        /// </summary>
        /// <param name="site">Site.</param>
        void InsertSite(Core.Domain.Site.Site site);

        /// <summary>
        /// Update a site
        /// </summary>
        /// <param name="site">Site.</param>
        void UpdateSite(Core.Domain.Site.Site site);

        /// <summary>
        /// Delete a site
        /// </summary>
        /// <param name="site">Site.</param>
        void DeleteSite(Core.Domain.Site.Site site);

        #endregion
    }
}
